lambda的使用

Lambda 表达式本质上是对接口的实现,Lambda 表达式的参数列表本质上对应着接口中方法
的参数列表。Lambda 体本质上就是接口方法具体实现的功能。

Collectors.groupingBy

    public static void main(String[] args) {
        List<User> list = new ArrayList(){{
            add(new User(10, "李四"));
            add(new User(5, "张三"));
        }};

        // 默认为HashMap
        Map<String, List<User>> collect = list.stream().peek(user -> {
            System.out.println(user);
        }).collect(Collectors.groupingBy(User::getName));
        for (String s : collect.keySet()) {
            System.out.println(s);
            System.out.println(collect.get(s));
        }
    }

// 打印结果
User{age=10, name='李四'}
User{age=5, name='张三'}
李四
[User{age=10, name='李四'}]
张三
[User{age=5, name='张三'}]
    public static void main(String[] args) {
        List<User> list = new ArrayList(){{
            add(new User(10, "李四"));
            add(new User(5, "张三"));
        }};

        // 默认为HashMap
        Map<String, List<User>> collect = list.stream().sorted(Comparator.comparingInt(User::getAge)).peek(user -> {
            System.out.println(user);
        }).collect(Collectors.groupingBy(User::getName));
        for (String s : collect.keySet()) {
            System.out.println(s);
            System.out.println(collect.get(s));
        }
    }

// 打印结果
User{age=5, name='张三'}
User{age=10, name='李四'}
李四
[User{age=10, name='李四'}]
张三
[User{age=5, name='张三'}]
    public static void main(String[] args) {
        List<User> list = new ArrayList(){{
            add(new User(10, "李四"));
            add(new User(5, "张三"));
        }};

        // 指定为LinkedHashMap
        Map<String, List<User>> collect = list.stream().sorted(Comparator.comparingInt(User::getAge)).peek(user -> {
            System.out.println(user);
        }).collect(Collectors.groupingBy(User::getName, LinkedHashMap::new, Collectors.toList()));
        for (String s : collect.keySet()) {
            System.out.println(s);
            System.out.println(collect.get(s));
        }
    }

// 打印结果
User{age=5, name='张三'}
User{age=10, name='李四'}
张三
[User{age=5, name='张三'}]
李四
[User{age=10, name='李四'}]

由案例1和2可以看出不管排不排序,聚合操作后的结果都是无序的,因为它默认的是HashMap,所以如果要保证聚合后的顺序则需要指定使用LinkedHashMap,如案例三


flatMap将多个流合并成一个流,可用list的合并

List<String> answers = quAnswerDataVo.getAnswers().stream().flatMap(quAnswerDataSubConvert -> {
    String answerJSONArray = quAnswerDataSubConvert.getAnswer();
    return JSONArray.parseArray(answerJSONArray, JSONObject.class).stream().map(jsonObject -> jsonObject.getString("id"));
}).collect(Collectors.toList());

版权声明:本文为evalsys原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。