JDK8新特性之lambda表达式

        Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。使用 Lambda 表达式可以使代码变的更加简洁紧凑。在实际工作中我一般会使用lambda表达式将集合根据某个条件过滤,分组,排序,转为map.

基础代码

        List<Person> list = new ArrayList<>();
        list.add(new Person(11,"张三","男"));
        list.add(new Person(30,"李四","女"));
        list.add(new Person(20,"王五","男"));
  • 单个条件过滤(年龄大于15岁的)
list = list.parallelStream().filter(av -> av.getAge() > 15 ).collect(Collectors.toList());
  • 多个条件过滤(年龄大于15岁,性别男)
        Predicate<Person> conditionOne = (p) -> p.getAge() > 15;
        Predicate<Person> conditionTwo = (p) -> p.getSex() .equals("男");
        list = list.parallelStream().filter(conditionOne.and(conditionTwo)).collect(Collectors.toList());
        list.forEach(System.out::println);

filter传入Predicate接口,主要有三个方法,and or negate 对别对应 && || ! 

    default Predicate<T> and(Predicate<? super T> other) {
        Objects.requireNonNull(other);
        return (t) -> test(t) && other.test(t);
    }

    default Predicate<T> negate() {
        return (t) -> !test(t);
    }

    default Predicate<T> or(Predicate<? super T> other) {
        Objects.requireNonNull(other);
        return (t) -> test(t) || other.test(t);
    }
  • 根据性别分组,将list转化为map
Map<String, List<Person>> map = list.parallelStream().collect(Collectors.groupingBy(Person::getSex));
System.out.println(map);

结果:

{女=[Person(age=20, name=李四, sex=女)], 男=[Person(age=11, name=张三, sex=男), Person(age=20, name=王五, sex=男)]}

  • 根据年龄排序,指定多个字段排序,降序使用reversed()方法
list = list.stream().sorted(Comparator.comparing(Person::getAge).reversed().thenComparing(Person::getSex)).collect(Collectors.toList());
  • 获取集合对象某个属性的集合比如ID
        List<String> result= list.parallelStream().map(Person::getName).collect(Collectors.toList());
  • 获取将集合对象的ID作为key,对象作为value的map,注意不是有序的,如果需要有序的,使用LinkHashMap遍历添加
        Map<String, Person> map = list.stream().collect(Collectors.toMap(Person::getName, ev -> ev));

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值