首页 > 编程语言 > 详细

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

时间:2019-05-22 11:32:42      阅读:212      评论:0      收藏:0      [点我收藏+]

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);
    }

}

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

原文:https://www.cnblogs.com/zxfei/p/10904603.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!