Java JDK1.8新特性之四大函数式接口

JDK 1.8的一些新特性

四大核心函数式接口(Consumer、Predicate、Supplier、Function),结合lambda表达式

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

public class JDk18Demo {

	public static void main(String[] args) {
		// foreach();
		// function();
		supplier();
		predicate();
	}

	/**
	 * Predicate接口:断言接口,断言可理解为测试的意思
	 * 测试给定字符串列表中哪些字符串包含小写字母m
	 */
	private static void predicate() {
		List<String> list = Arrays.asList("Mikey", "Lily", "Jimy", "Tom");
	
		// 有没有参数取决于接口中的方法有没有参数 boolean test(T t);
		List<String> results = filter(list, (str) -> str.contains("m"));
		results.forEach(System.out::println);
	}
	private static List<String> filter(List<String> list, Predicate<String> p) {
		List<String> results = new ArrayList<>();

		for (String str : list) {
			if (p.test(str)) {// 测试是否符合要求
				results.add(str);
			}
		}
		return results;
	}

	/**
	 * Supplier接口:代表结果供应商
	 */
	private static void supplier() {
		List<Integer> list = getNums(10, () -> (int) (Math.random() * 100));
		list.forEach(System.out::println);
	}
	// 获取num个随机数,由调用者给出具体实现
	private static List<Integer> getNums(int num, Supplier<Integer> sup) {
		List<Integer> list = new ArrayList<>();

		for (int i = 0; i < num; i++) {
			list.add(sup.get());
		}
		return list;
	}

	/**
	 * Function<T, R>接口:表示接收一个参数并产生结果的函数
	 */
	private static void function() {
		String s = strToUpp("lowercase", (str) -> str.toUpperCase());
		System.out.println(s);
	}
	// 将给定字符串转为大写,由调用者给出具体实现
	private static String strToUpp(String str, Function<String, String> f) {
		return f.apply(str);
	}

	/**
	 * Consumer接口:消费者接口 
	 * jdk 1.8中的新的迭代方法
	 */
	private static void foreach() {
		List<String> list = new ArrayList<>();
		list.add("Tom");
		list.add("Mikey");
		list.add("Lily");

		list.forEach((String s) -> {
			System.out.println(s);
		});
		// 只有一行代码,可简写为
		list.forEach(s -> System.out.println(s));
		// 进一步可用新语法写为
		list.forEach(System.out::println);
	}

}
posted on 2019-05-22 10:57  行之间  阅读(411)  评论(0编辑  收藏  举报