Java lambda表达式操作

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Foo {

    private static final List<Person> persons = Arrays.asList(new Person("Tom", 8900, (short) 23, "male", "New York"), new Person("Jack", 7000, (short) 25, "male", "Washington"), new Person("Lily", 7800, (short) 21, "female", "Washington"), new Person("Anni", 8200, (short) 24, "female", "New York"), new Person("Owen", 9500, (short) 25, "male", "New York"), new Person("Alisa", 7900, (short) 26, "female", "New York"));

    public static void main(String[] args) {
        // 遍历输出大于6的元素
        Arrays.asList(7, 6, 9, 3, 8, 2, 1).stream().filter(e -> e > 6).forEach(System.out::println);
        System.out.printf("大于6的数取第一个:%d\n", Arrays.asList(7, 6, 9, 3, 8, 2, 1).parallelStream().filter(e -> e > 6).findFirst().get());
        System.out.printf("大于6的数随取一个:%d\n", Arrays.asList(7, 6, 9, 3, 8, 2, 1).parallelStream().filter(e -> e > 6).findAny().get());


        System.out.printf("工资大于8000的员工数量: %d\n", persons.parallelStream().filter(e -> e.getSalary() > 8000).count());
        System.out.printf("工资大于8000的员工数量: %d\n", persons.parallelStream().filter(e -> e.getSalary() > 8000).collect(Collectors.counting()));
        System.out.printf("工资大于8000的所有员工: %s\n", persons.parallelStream().filter(e -> e.getSalary() > 8000).collect(Collectors.toList()));
        System.out.printf("工资大于8000的所有员工: %s\n", persons.parallelStream().filter(e -> e.getSalary() > 8000).collect(Collectors.toSet()));
        System.out.printf("工资大于8000的所有员工: %s\n", persons.parallelStream().filter(e -> e.getSalary() > 8000).collect(Collectors.toMap(Person::getName, Function.identity())));
        System.out.printf("工资最高的员工: %s\n", persons.parallelStream().max(Comparator.comparingDouble(Person::getSalary)).get());
        System.out.printf("工资最低的员工:%s\n", persons.parallelStream().min(Comparator.comparingDouble(Person::getSalary)).get());
        System.out.printf("年龄最大的员工:%s\n", persons.parallelStream().max(Comparator.comparingInt(Person::getAge)).get());
        System.out.printf("年龄最小的员工:%s\n", persons.parallelStream().min(Comparator.comparingInt(Person::getAge)).get());
        System.out.printf("名字最长的员工:%s\n", persons.parallelStream().max(Comparator.comparingInt(e -> e.getName().length())).get());
        System.out.printf("年龄之和:%d\n", persons.stream().mapToInt(Person::getAge).reduce(Integer::sum).getAsInt());
        System.out.printf("名字最短的员工:%s\n", persons.parallelStream().min(Comparator.comparingInt(e -> e.getName().length())).get());
        System.out.printf("工资增1000后:%s\n", persons.stream().map(person -> {
            final Person bean = new Person();
            org.springframework.beans.BeanUtils.copyProperties(person, bean);
            bean.setSalary(bean.getSalary() + 1000);
            return bean;
        }).collect(Collectors.toList()));
        System.out.printf("求平均工资:%f\n", persons.stream().collect(Collectors.averagingDouble(Person::getSalary)));
        System.out.printf("工资之和:%f\n", persons.stream().collect(Collectors.summingDouble(Person::getSalary)));
        System.out.printf("统计所有:%s\n", persons.stream().collect(Collectors.summarizingDouble(Person::getSalary)));

        System.out.printf("最大长度串为:%s\n", Arrays.asList("adnm", "admmt", "pot", "xbangd", "weoujgsd").stream().max(Comparator.comparing(String::length)).get());
        System.out.printf("最小长度串为:%s\n", Arrays.asList("adnm", "admmt", "pot", "xbangd", "weoujgsd").stream().min(Comparator.comparing(String::length)).get());
        System.out.printf("数组长度为:%d\n", Arrays.asList("adnm", "admmt", "pot", "xbangd", "weoujgsd").stream().count());
        System.out.printf("数组元素转大写:%s\n", Arrays.asList("adnm", "admmt", "pot", "xbangd", "weoujgsd").stream().map(String::toUpperCase).collect(Collectors.toList()));
        System.out.printf("数组元素转小写:%s\n", Arrays.asList("adnm", "admmt", "pot", "xbangd", "weoujgsd").stream().map(String::toLowerCase).collect(Collectors.toList()));

        System.out.printf("自然排序最大值:%d\n", Arrays.asList(7, 6, 9, 4, 11, 6).stream().max(Integer::compareTo).get());
        System.out.printf("自然排序最小值:%d\n", Arrays.asList(7, 6, 9, 4, 11, 6).stream().min(Integer::compareTo).get());
        System.out.printf("自定义排序最大值: %d\n", Arrays.asList(7, 6, 9, 4, 11, 6).stream().max((m, n) -> m.compareTo(n)).get());
        System.out.printf("自定义排序最小值: %d\n", Arrays.asList(7, 6, 9, 4, 11, 6).stream().min((m, n) -> m.compareTo(n)).get());
        System.out.printf("集合元素均加3: %s\n", Arrays.asList(7, 6, 9, 4, 11, 6).stream().map(e -> e + 3).collect(Collectors.toList()));
        System.out.printf("求和: %s\n", Arrays.asList(7, 6, 9, 4, 11, 6).stream().reduce(Integer::sum).get());
        System.out.printf("求和: %s\n", Arrays.asList(7, 6, 9, 4, 11, 6).stream().reduce((m, n) -> m + n).get());
        System.out.printf("求和: %s\n", Arrays.asList(7, 6, 9, 4, 11, 6).stream().reduce(0, Integer::sum));
        System.out.printf("求积: %s\n", Arrays.asList(7, 6, 9, 4, 11, 6).stream().reduce((m, n) -> m * n).get());
        System.out.printf("求积: %s\n", Arrays.asList(7, 6, 9, 4, 11, 6).stream().reduce(1, (m, n) -> m * n));

        System.out.printf("合并数组:%s\n", Arrays.asList("1,2,3,4", "A,B,C,D").stream().flatMap(s -> Arrays.stream(s.split(","))).collect(Collectors.toList()));

        // 1 从员工集合中筛选出salary大于8000的员工,并放置到新的集合里
        System.out.println(persons.stream().filter(e -> e.getSalary() > 8000).collect(Collectors.toSet()));

        // 2 统计员工的最高薪资、平均薪资、薪资之和。
        System.out.println(persons.stream().max(Comparator.comparingDouble(Person::getSalary)).get().getSalary());
        System.out.println(persons.stream().collect(Collectors.averagingDouble(Person::getSalary)));
        System.out.println(persons.stream().collect(Collectors.summingDouble(Person::getSalary)));

        // 3 将员工按薪资从高到低排序,同样薪资者年龄小者在前。
        System.out.println(persons.stream().sorted(Comparator.comparing(Person::getSalary).reversed()).collect(Collectors.toList()));
        System.out.println(persons.stream().sorted(Comparator.comparingInt(Person::getAge)).collect(Collectors.toList()));

        // 4. 将员工按性别分类,将员工按性别和地区分类,将员工按薪资是否高于8000分为两部分。
        System.out.println(persons.stream().collect(Collectors.groupingBy(Person::getSex)));
        System.out.println(persons.stream().collect(Collectors.groupingBy(Person::getSex, Collectors.groupingBy(Person::getArea))));
        System.out.println(persons.stream().collect(Collectors.partitioningBy(x -> x.getSalary() > 8000)));

        // 5 词频统计
        System.out.println(Arrays.asList("玩具 总动员", "海底 总动员", "机器人 总动员", "海底 两万里").stream().flatMap(e -> Arrays.stream(e.split(" "))).collect(Collectors.groupingBy(Function.identity(), Collectors.counting())));
    }

}

class Person {

    private String name; // 姓名
    private float salary; // 薪资
    private short age; // 年龄
    private String sex; //性别
    private String area; // 地区

    public Person() {
    }

    public Person(String name, int salary, short age, String sex, String area) {
        this.name = name;
        this.salary = salary;
        this.age = age;
        this.sex = sex;
        this.area = area;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public float getSalary() {
        return salary;
    }

    public void setSalary(float salary) {
        this.salary = salary;
    }

    public short getAge() {
        return age;
    }

    public void setAge(short age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getArea() {
        return area;
    }

    public void setArea(String area) {
        this.area = area;
    }

    @Override
    public String toString() {
        return new org.apache.commons.lang3.builder.ToStringBuilder(this, org.apache.commons.lang3.builder.ToStringStyle.JSON_STYLE)
                .append("name", getName())
                .append("salary", getSalary())
                .append("age", getAge())
                .append("sex", getSex())
                .append("area", getArea())
                .toString();
    }
}

posted @ 2022-02-22 17:39  Bruce.Chang.Lee  阅读(67)  评论(0编辑  收藏  举报