JavaSE-Stream流的终结方法_collect

目录

前言

收集到List集合

收集到Set集合

收集到Map集合

一般写法

Lambda表达式的写法

注意点


前言

该文承接这篇文章进行续写:JavaSE-Stream流的终结方法_forEach_count_toArray_collect-CSDN博客

收集到List集合

需求:把所有的男性收集起来

public class StreamDemo15 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"张无忌-男-16","周芷若-女-20","赵敏-女-18","张强-男-30"
                ,"张三丰-男-24","张翠山-男-19","王二狗-男-40","谢广坤-男-37");
        List<String> newList1 = list.stream()
                .filter(s->"男".equals(s.split("-")[1]))
                .collect(Collectors.toList());
        System.out.println(newList1);
    }
}

收集到Set集合

需求:把所有的男性收集起来

public class StreamDemo16 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"张无忌-男-16","周芷若-女-20","赵敏-女-18","张强-男-30"
                ,"张三丰-男-24","张翠山-男-19","王二狗-男-40","谢广坤-男-37");
        Set<String> newSet1 = list.stream()
                .filter(s->"男".equals(s.split("-")[1]))
                .collect(Collectors.toSet());
        System.out.println(newSet1);
    }
}

收集到Map集合

需求:把所有男性收集起来。其中姓名作为键,年龄作为值

一般写法

public class StreamDemo17 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"张无忌-男-16","周芷若-女-20","赵敏-女-18","张强-男-30"
                ,"张三丰-男-24","张翠山-男-19","王二狗-男-40","谢广坤-男-37");
        Map<String, Integer> newMap1 = list.stream()
                .filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toMap(new Function<String, String>() {
                    @Override
                    public String apply(String s) {
                        return s.split("-")[0];
                    }
                }, new Function<String, Integer>() {
                    @Override
                    public Integer apply(String s) {
                        return Integer.parseInt(s.split("-")[2]);
                    }
                }));
        System.out.println(newMap1);
    }
}

关于toMap中的参数

Lambda表达式的写法

因为toMap接收的参数是函数式接口,所以可以使用Lambda表达式进行简化。如果对Lambda表达式不太清楚,可以阅读这篇文章:JavaSE-Lambda表达式-CSDN博客

public class StreamDemo17 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"张无忌-男-16","周芷若-女-20","赵敏-女-18","张强-男-30"
                ,"张三丰-男-24","张翠山-男-19","王二狗-男-40","谢广坤-男-37");
        Map<String, Integer> newMap1 = list.stream()
                .filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toMap(s-> s.split("-")[0]
                , s ->Integer.parseInt(s.split("-")[2])));
        System.out.println(newMap1);
    }
}

打印结果:

注意点

如果我们要收集到Map集合中,键不能重复,否则会报错

猜你喜欢

转载自blog.csdn.net/m0_74462339/article/details/143382239