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

}

转载于:https://www.cnblogs.com/zxfei/p/10904603.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值