java8Lambda表达式总结

一.Lambda表达式简介

 Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。

Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

使用 Lambda 表达式可以使代码变的更加简洁紧凑。

二.常见语法

      (parameters) -> expression 或 (parameters) ->{ statements; }

三.Lambda使用案例

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.function.Function;
import java.util.stream.Collectors;
public class LambdaDemo {

    public static void main(String[] args) {

        List<Person> personList = new ArrayList<Person>();
        personList.add(new Person("张三", 18, new BigDecimal(15000)));
        personList.add(new Person("李四", 50, new BigDecimal(11000)));
        personList.add(new Person("王二", 17, new BigDecimal(12000)));
        personList.add(new Person("麻子", 20, new BigDecimal(5000)));
        System.out.println(personList.toString());
        // 统计数量
        Long num = personList.stream().collect(Collectors.counting());
        System.out.println(num);
        // 不使用Lambda
        System.out.println(personList.size());
        // 最大值
        Person maxVal =
                personList.stream().collect(Collectors.maxBy(Comparator.comparingInt(Person::getAge))).get();
        System.out.println("最大值" + maxVal);

        Person minVal =
                personList.stream().collect(Collectors.minBy(Comparator.comparingInt(Person::getAge))).get();
        System.out.println("最小值" + minVal);

        // 求和
        Long sum = personList.stream().collect(Collectors.summarizingInt(Person::getAge)).getSum();
        System.out.println("求和" + sum);

        // 平均值
        Double avg = personList.stream().collect(Collectors.averagingDouble(Person::getAge));
        System.out.println("平均值" + avg);
        // 普通分组
        Map<Integer, List<Person>> map = personList.stream().collect(Collectors.groupingBy(Person::getAge));
        for (Entry<Integer, List<Person>> mapRes : map.entrySet()) {
            System.out.println(mapRes.getKey() + "普通分组--" + mapRes.getValue());
        }

        // 5.一级分组
        Map<String, List<Person>> collect = personList.stream().collect(Collectors.groupingBy(person -> {
            if (person.getAge() >= 30) {
                return "30";
            } else if (person.getAge() >= 25) {
                return "25";
            } else {
                return "20";
            }
        }));

        for (Entry<String, List<Person>> mapRes : collect.entrySet()) {
            System.out.println(mapRes.getKey() + "一级分组--" + mapRes.getValue());
        }

        // 6.多级分组
        Map<String, Map<BigDecimal, List<Person>>> collect1 =
                personList.stream().collect(Collectors.groupingBy(p -> {
                    if (p.getAge() >= 30) {
                        return "30";
                    } else if (p.getAge() >= 25) {
                        return "25";
                    } else {
                        return "20";
                    }
                }, Collectors.groupingBy(Person::getSal)));

        for (Entry<String, Map<BigDecimal, List<Person>>> mapRes : collect1.entrySet()) {
            System.out.println(mapRes.getKey() + "多级分组--" + mapRes.getValue());
        }

        // 8.将对象集合中的属性转换映射到新的集合
        List<Integer> ageList = personList.stream().map(Person::getAge).collect(Collectors.toList());
        System.out.println("转list--" + ageList);

        // 9.将对象的一个属性作为 Map 的 key,本身作为 value 映射到 Map 集合
        Map<Integer, Person> mapRes =
                personList.stream().collect(Collectors.toMap(Person::getAge, Function.identity()));
        // 10.将对象的一个属性作为 Map 的 key,属性 映射到 Map 集合
        Map<Integer, String> mapRes1 =
                personList.stream().collect(Collectors.toMap(Person::getAge, Person::getName));
        // 11.通过属性过滤数据
        List<Person> empList = personList.stream().filter(p -> p.getAge() > 20).collect(Collectors.toList());

        // 12.数值进行求和算数操作,并将结果四舍五入
        BigDecimal totalIncome = personList.stream().map(Person::getSal)
                .reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);

        System.out.println("--------单条件排序开始-----------");
        // 13.单条件排序
        List<Person> sortList1 =
                personList.stream().sorted(Comparator.comparing(Person::getAge)).collect(Collectors.toList());
        sortList1.forEach((e) -> {
            System.out.println(e.toString());
        });
        System.out.println("--------单条件排序结束-----------");

        System.out.println("--------多条件排序开始-----------");
        // 14.多条件排序
        List<Person> sortList2 = personList.stream()
                .sorted(Comparator.comparing(Person::getAge).thenComparing(Person::getSal).reversed())
                .collect(Collectors.toList());
        sortList2.forEach((e) -> {
            System.out.println(e.toString());
        });

        System.out.println("--------多条件排序结束-----------");
    }
}
import java.math.BigDecimal;
public class Person {

    private String name;

    private Integer age;

    private BigDecimal sal;

    public String getName() {

        return name;
    }

    public void setName(String name) {

        this.name = name;
    }

    public Integer getAge() {

        return age;
    }

    public void setAge(Integer age) {

        this.age = age;
    }

    public BigDecimal getSal() {

        return sal;
    }

    public void setSal(BigDecimal sal) {

        this.sal = sal;
    }

    public Person(String name, Integer age, BigDecimal sal) {

        super();
        this.name = name;
        this.age = age;
        this.sal = sal;
    }

    @Override
    public String toString() {

        return "Person [name=" + name + ", age=" + age + ", sal=" + sal + "]";
    }

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值