JDK8新特性之lambda表达式

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

基础代码

        List 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 conditionOne = (p) -> p.getAge() > 15;
        Predicate 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 and(Predicate other) {
        Objects.requireNonNull(other);
        return (t) -> test(t) && other.test(t);
    }

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

    default Predicate or(Predicate other) {
        Objects.requireNonNull(other);
        return (t) -> test(t) || other.test(t);
    }
  • 根据性别分组,将list转化为map
Map> 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 result= list.parallelStream().map(Person::getName).collect(Collectors.toList());
  • 获取将集合对象的ID作为key,对象作为value的map,注意不是有序的,如果需要有序的,使用LinkHashMap遍历添加
        Map map = list.stream().collect(Collectors.toMap(Person::getName, ev -> ev));

 

你可能感兴趣的:(lambda,lambda)