JAVA8语法

本文介绍了JAVA8的两大重要特性:Lambda表达式和Stream流。Lambda表达式简化了匿名内部类的使用,允许以简洁的方式定义单方法接口的实现。Stream流提供了新的数据处理方式,允许对集合进行高效的操作。文中给出了多个Lambda表达式和Stream流的实际应用场景,包括构造线程、遍历、排序、分组、过滤、修改属性以及将对象转换为List等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA8新特性

一、Lambda表达式

Lambda规定接口中只能有一个需要被实现的方法,不是规定接口中只能有一个方法。

jdk 8 中有另一个新特性:default, 被 default 修饰的方法会有默认实现,不是必须被实现的方法,所以不影响 Lambda 表达式的使用

注解@FunctionalInterface修饰函数式接口,要求接口中的抽象方法只有一个。一般会与Lambda表达式一起出现。

语法形式为 () -> {},其中 () 用来描述参数列表,{} 用来描述方法体,-> 为 lambda运算符 ,读作(goes to)。

1.2 Lambda表达式常用示例

  1. Lambda表达式引用方法

    有时候我们不是必须要自己重写某个匿名内部类的方法,我们可以可以利用 lambda表达式的接口快速指向一个已经被实现的方法。

    语法:

    方法归属者::方法名

    静态方法的归属者为类名,普通方法归属者为对象

  2. 构造方法

  3. 创建线程

  4. 遍历集合

  5. 排序

1.3 参考资料

参考链接:https://www.cnblogs.com/haixiang/p/11029639.html

二、Stream流

https://blog.youkuaiyun.com/weixin_38294999/article/details/89277697

三、实例

3.1 需求1:List里面的元素,以某个属性来分组成Map<Object, List。

例如,以id分组,将id相同的放在一起:

代码:

public class Test{
    public static void main(String[] args){
        List<Apple> list = new ArrayList<>();
        Apple apple = new Apple(1,"苹果1",new BigDecimal(3.25),10);
        Apple apple2 = new Apple(2,"苹果2",new BigDecimal(3.35),10);
        Apple apple3 = new Apple(1,"苹果3",new BigDecimal(3.25),15);
        list.add(apple);
        list.add(apple2);
        list.add(apple3);

        // 按照id进行分组
        Map<Integer, List<Apple>> listMap = list.stream().collect(Collectors.groupingBy(Apple::getId));

        System.out.println(listMap);
    }
}

3.2 List转为Map<Object,Object>

将List里面的实体类

/**
 * List -> Map
 * 需要注意的是:
 * toMap 如果集合对象有重复的key,会报错Duplicate key ....
 *  apple1,apple12的id都为1。
 *  可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2
 */
Map<Integer, Apple> appleMap = appleList.stream().collect(Collectors.toMap(Apple::getId, a -> a,(k1,k2)->k1));

3.3 过滤List,找出符合要求的对象并转为list

从集合中过滤出来符合条件的元素:

//过滤出符合条件的数据
List<Apple> filterList = appleList.stream().filter(a -> a.getName().equals("香蕉")).collect(Collectors.toList());
 
System.err.println("filterList:"+filterList);
[Apple{id=2, name='香蕉', money=2.89, num=30}]

3.4 过滤list, 返回任何一个符合要求的对象,如果为null,则返回自定义的

Apple apple = appleList.stream().filter(a -> a.getName().equals("香蕉")).findAny().orElse(null);

3.5 如果找到符合要求的对象,对该对象的某个属性进行修改

ifPresent 用于对过滤出的数据如果存在。如果经过过滤条件后,有数据的话就可以进行修改。

appleList.stream().filter(a -> a.getName().equals("香蕉")).findAny().ifPresent(a->a.setName("苹果"));

3.6 将一个元素转换为List

对象bean : Apple apple = new Apple();

List list = Stream.of(apple).collect(Collectors.toList());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值