• 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);
    	}
    
    }
  • 相关阅读:
    Get IPv4 Address 2.0
    Apache Tomcat Manager 2.0
    Apache Tomcat Manager 1.0
    FTP自动登录脚本文件
    VMware Workstation 10 + CentOS-5.5-i386 + MySQL Server 5.5
    Copy Files Blurry 1.0
    Extract Chorus From Audio 1.0
    Refresh Baidu Zhidao Evaluate Num 2.0
    File Split 1.0
    其它有趣的事情分享
  • 原文地址:https://www.cnblogs.com/zxfei/p/10904603.html
Copyright © 2020-2023  润新知