zoukankan      html  css  js  c++  java
  • 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);
    	}
    
    }
  • 相关阅读:
    CoffeeScript介绍
    在ubuntu下安装rails
    NodeJS扫盲班
    sguID056681
    UVA11865 Stream My Contest(最小树形图)
    POJ1469COURSES(二分图最大匹配)
    UVA1494 Qin Shi Huang's National Road System(最小生成树)
    UVA11478 Halum(差分约束系统)
    二分图最大匹配总结
    POJ1466Girls and Boys(二分图最大独立集)
  • 原文地址:https://www.cnblogs.com/zxfei/p/10904603.html
Copyright © 2011-2022 走看看