java8 stream 常規操作

去入職新公司看到代碼中有大量的stream操作,去網上看了一些博客學習做了一些筆記


import com.google.common.collect.Lists;

import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Demo {
    public static List<Emp> emps = Lists.newArrayList();

    static {
        emps.add(new Emp("zhangsan", 20, 1000.0, "上海"));
        emps.add(new Emp("lisi", 25, 2000.0, "上海"));
        emps.add(new Emp("wangwu", 30, 3000.0, "北京"));
        emps.add(new Emp("zhaoliu", 35, 4000.0, "上海"));
        emps.add(new Emp("liuqi", 38, 5000.0, "上海"));
        emps.add(new Emp("maba", 45, 9000.0, "北京"));
        emps.add(new Emp("houjiu", 42, 15000.0, "深圳"));
        emps.add(new Emp("wangmazi", 55, 10000.0, "深圳"));
    }

    public static void println(Emp emp) {
        System.out.println(String.format("名字:%s,年紀:%s,薪水:%s,地址:%s", emp.getName(), emp.getAge(), emp.getSalary(), emp.getAddress()));
    }

    public static String print(Emp emp) {
        return String.format("{名字:%s,年紀:%s,薪水:%s,地址:%s}", emp.getName(), emp.getAge(), emp.getSalary(), emp.getAddress());
    }

    public static void main(String[] args) {
        System.out.println("===============================================");
        //轉list(name)
        List<String> listName = emps.stream().map(Emp::getName).collect(Collectors.toList());
        listName.forEach(System.out::println);
        System.out.println("===============================================");
        //轉set(name)
        Set<String> setName = emps.stream().map(emp -> emp.getName()).collect(Collectors.toSet());
        setName.forEach(System.out::println);
        System.out.println("===============================================");
        //轉map<name,Emp> ;(m1, m2) -> m1:map key重複 保留m1
        Map<String, Emp> mapEmp = emps.stream().collect(Collectors.toMap(Emp::getName, Function.identity(), (m1, m2) -> m1));
        mapEmp.forEach((x, y) -> System.out.println(x + ":" + print(y)));
        System.out.println("===============================================");
        //轉map<name,salary>
        Map<String, Double> mapNameSalary = emps.stream().collect(Collectors.toMap(Emp::getName, Emp::getSalary, (m1, m2) -> m1));
        mapNameSalary.forEach((x, y) -> System.out.println(x + ":" + y));
        System.out.println("===============================================");
        //統計集合size 效果 == size()方法
        System.out.println(emps.stream().count());
        //第二種寫法
        System.out.println(emps.stream().collect(Collectors.counting()));
        System.out.println("===============================================");
        //求和(salary)
        System.out.println(emps.stream().collect(Collectors.summingDouble(Emp::getSalary)));
        System.out.println("===============================================");
        //求平均值(salary)
        System.out.println(emps.stream().collect(Collectors.averagingDouble(Emp::getSalary)));
        System.out.println("===============================================");
        //綜合求 最大,最小,平均,求和 (salary)
        DoubleSummaryStatistics salary = emps.stream().collect(Collectors.summarizingDouble(Emp::getSalary));
        System.out.println(salary.getMax());
        System.out.println(salary.getAverage());
        System.out.println(salary.getCount());
        System.out.println(salary.getMin());
        System.out.println(salary.getSum());
        System.out.println("===============================================");
        //最大最小的salary - 2
        System.out.println(emps.stream().map(Emp::getSalary).collect(Collectors.maxBy(Comparator.comparing(Function.identity()))).get());
        System.out.println(emps.stream().map(Emp::getSalary).max(Comparator.comparing(Function.identity())).get());
        System.out.println(emps.stream().map(Emp::getSalary).collect(Collectors.minBy(Comparator.comparing(Function.identity()))).get());
        System.out.println(emps.stream().map(Emp::getSalary).min(Comparator.comparing(Function.identity())).get());
        System.out.println("===============================================");
        //最大值(salary)的 Emp
        println(emps.stream().max(Comparator.comparingDouble(Emp::getSalary)).get());
        println(emps.stream().collect(Collectors.maxBy(Comparator.comparingDouble(Emp::getSalary))).get());
        System.out.println("===============================================");
        //拼接string
        System.out.println(emps.stream().map(Emp::getName).collect(Collectors.joining()));
        System.out.println(emps.stream().map(Emp::getName).collect(Collectors.joining("|")));
        System.out.println(emps.stream().map(Emp::getName).collect(Collectors.joining(",", "[", "]")));
        System.out.println("===============================================");
        //reduce 操作
        Double aDouble = emps.stream().map(Emp::getSalary).reduce((a, b) -> a + b).get();
        System.out.println(aDouble);
        Double reduce = emps.stream().map(Emp::getSalary).reduce(0.0, (a, b) -> a + b, (a, b) -> 0.0);
        System.out.println(reduce);
        System.out.println("===============================================");
        //分組
        Map<String, List<Emp>> listMap = emps.stream().collect(Collectors.groupingBy(Emp::getAddress));
        listMap.forEach((x,y)->{
            System.out.println(x+"有:");
            y.stream().forEach(Demo::println);
            System.out.println("------------------------------------------------");
        });
        Map<Boolean, List<Emp>> booleanListMap = emps.stream().collect(Collectors.groupingBy(x -> x.getSalary() > 3000.0));
        booleanListMap.forEach((x,y)->{
            System.out.println(x+"有");
            y.stream().forEach(Demo::println);
            System.out.println("------------------------------------------------");
        });
    }
}

下面是業務類

public class Emp {
    private String name;

    private Integer age;

    private Double salary;

    private String address;

    public Emp() {
    }

    public Emp(String name, Integer age, Double salary, String address) {
        super();
        this.name = name;
        this.age = age;
        this.salary = salary;
        this.address = address;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    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 Double getSalary() {
        return salary;
    }

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

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章