JDK1.8新特性

本文深入探讨了JDK1.8中Lambda表达式的应用,包括创建匿名内部类、与Stream API结合进行数据过滤、统计及转换。通过实例展示了lambda简化代码、提高效率的方法,并解释了map、reduce等Stream操作的区别与用法。
摘要由CSDN通过智能技术生成

lambda表达式

创建匿名内部类

// 1.8前创建匿名内部类
 	Converter<String ,Integer> converter = new Converter<String, Integer>() {
        @Override
        public Integer converter(String s) {
            return Integer.parseInt(s);
        }
    };
// 1.8后创建匿名内部类方法1
	Converter<String ,Integer> converter = (f) -> {
        return Integer.valueOf(f);
    };
// 1.8后创建匿名内部类方法2
	Converter<String ,Integer> converter = (f) -> Integer.parseInt(f);

lambda和stream结合:过滤

    public static void main(String[] args) {
        // lambda与Stream结合使用
        // 创建Stream对象
        Stream<String> stream = Stream.of("aaa","bbb","ccc");
        // 列表转Stream对象
        ArrayList<String> array = new ArrayList<String>();
        array.add("a");
        array.add("b");
        array.add("c");

        // 使用lambda表达式过滤出以"a"开头的流
        stream.filter((s) -> s.startsWith("a")).forEach(s -> System.out.println(s)); // 打印aaa
        array.stream().filter(s -> s.startsWith("a")).forEach(s -> System.out.println(s)); // 打印a
    }

lambda和stream结合:过滤+统计

    public static void main(String[] args) {
        // lambda与Stream结合使用
        // 创建Stream对象
        Stream<String> stream = Stream.of("aaa","bbb","ccc");

        // 使用lambda表达式过滤出以"a"开头的流,并统计出过滤后的元素个数
        long count = stream.filter(s -> s.startsWith("a")).count();
        System.out.println(count); // 打印1
    }

lambda双冒号的使用

	public static void main(String[] args) {
        // lambda与Stream结合使用
        // 创建Stream对象
        Stream<String> stream = Stream.of("aaa","bbb","ccc");

        // 双冒号的使用:将方法作为一个参数传入到stream内部,使stream里面的每一个参数都在该方法中执行一次
        stream.forEach(TestClass::printStr); // 打印aaa bbb ccc
    }

    public static void printStr(String str) {
        System.out.print(str + " ");
    }

lambda map和stream.forEach 区别

map 方法的用途是将旧数据转换后变为新数据,是一种 1:1 的映射,每个输入元素按照规则转换成另一个元素。该方法是 Intermediate 操作

	Stream<String> stream = Stream.of("a", "b", "c", "d");
	stream.map(String::toUpperCase).forEach(System.out::println);

lambda map作用

一般用于对集合数据做过滤,如获取对象SapPurchaseTaskDetail中的id集合,可以使用

List<String> correlativeOrderIdList = taskDetailList.stream().map(SapPurchaseTaskDetail::getCorrelativeOrderId).distinct().collect(Collectors.toList());

Reduce的作用

Reduce中文含义为:减少、缩小;而Stream中的Reduce方法干的正是这样的活:根据一定的规则将Stream中的元素进行计算后返回一个唯一的值。
它有三个变种,输入参数分别是一个参数、二个参数以及三个参数;
一个参数:

Stream<Integer> stream = Arrays.stream(new Integer[]{1, 2, 3, 4, 5, 6, 7, 8});
// 求最大值
stream.reduce((a, b) -> a >= b ? a : b).get();

两个参数:

Stream<Integer> stream = Arrays.stream(new Integer[]{1, 2, 3, 4, 5, 6, 7, 8});
//求集合元素的和==>以初始值1作为开始,进行计算=1+1+2+3+4+5+6+7+8
Integer result = stream.reduce(1, Integer::sum);

ifPresent的作用

判断是否为空,如果不为空,使用get

 AList.stream() 
                          .filter(a -> "小明".equals(a.getUserName())) 
                          .findFirst()
                          .ifPresent(a -> {
                              a.setUserName("明明");
                          })

Optional

主要是用于判断是否为空,主用于链式编程

精华帖子 : https://www.cnblogs.com/zhangboyu/p/7580262.html

Collectors.groupingBy

用于分组,返加一个map集合

	detailList.stream().collect(Collectors.groupingBy(k -> k.getSiteLogisticsTaskId()));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值