自学内容网 自学内容网

java8 Stream使用中的一些实践

使用Stream将List转换为Map时key冲突问题

如下:
把userList转换为userMap
id为key user 为value 由于user2和user3的id相同,所以会报错

    @Test
    void testStream0() {
        User user1 = new User();
        user1.setId("1");
        user1.setName("小明");
        User user2 = new User();
        user2.setId("2");
        user2.setName("小红");
        User user3 = new User();
        user3.setId("2");
        user3.setName("小蓝");

        List<User> userList = new ArrayList<>();
        userList.add(user1);
        userList.add(user2);
        userList.add(user3);
        // 把userList转换为userMap key为id value为user  由于user2和user3的id相同,所以会报错
        Map<String, User> userMap = userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));
    }

执行结果:Duplicate key

java.lang.IllegalStateException: Duplicate key User(id=2, name=小红)
at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
at java.util.HashMap.merge(HashMap.java:1255)
at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)

正确使用方式:

明确指定key冲突时选择哪一个


// 把userList转换为userMap key为id value为user  遇到key冲突时,选择第二个key的值value2覆盖第一个key的值value1
Map<String, User> userMap = userList.stream().collect(Collectors.toMap(User::getId, Function.identity(), (value1,value2)-> value2));


使用Stream时得到List的size为不为0,元素Object为null问题

    @Test
    void testStream0() {
        User user1 = new User();
        user1.setId("1");

        List<User> userList = new ArrayList<>();
        userList.add(user1);
        List<String> list = userList.stream().map(u -> {
            if (StringUtils.isNotBlank(u.getName())) {
                return u.getName();
            } else {
                return null;
            }
        }).collect(Collectors.toList());
        System.out.println(list.size());
        System.out.println(JSON.toJSONString(list));
    }

可以使用filter方法过滤掉null值

List<String> list = userList.stream().map(u -> {
            if (StringUtils.isNotBlank(u.getName())) {
                return u.getName();
            } else {
                return null;
            }
        }).filter(Objects::nonNull).collect(Collectors.toList());

原文地址:https://blog.csdn.net/qq_40419080/article/details/138908646

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!