代码之家  ›  专栏  ›  技术社区  ›  lizzy hu

List<Object>的java流分组按字段返回“null”字符串

  •  -1
  • lizzy hu  · 技术社区  · 1 年前

    类用户定义:

    class User {
    
        private Integer id;
        private String name;
        private String hobby;
    
        // getter settter ... 
    }
    

    下面是减法爱好attr逻辑:

    // all user's hobby is empty/null 
    List<User> userList = getUserList();
    List<String> hobbyList = userList .stream().map(User::getHobby).distinct().collect(Collectors.toList());
    if (!CollectionUtils.isEmpty(hobbyList)) {
        // 
        log.info("[group by hobby] hobby list: {}", String.join(",", hobbyList));
    }
    

    执行结果为: [空]

    我不知道如何处理流操作

    结果应为NULL,而不是字符串“NULL”

    1 回复  |  直到 1 年前
        1
  •  0
  •   Pouya Rezaei    1 年前

    当你使用map操作符时,它会将每个用户的输入转换为输出 因此,当u有3个用户时,u会将3个对象映射为null,因此在输出中,u在区分时有3个null,它将是1,因此u应该在区分之前进行过滤

            List<User> userList = Arrays.asList(new User(), new User(), new User());
            List<String> hobbyList = userList.stream().map(User::getHobby).collect(Collectors.toList());
            List<String> distHobbyList = userList.stream().map(User::getHobby).distinct().collect(Collectors.toList());
            List<String> filteredDistHobbyList = userList.stream().map(User::getHobby).filter(Objects::nonNull).distinct().collect(Collectors.toList());
            System.out.println(hobbyList); // [null, null, null]
            System.out.println(distHobbyList); // [null]
            System.out.println(filteredDistHobbyList); // []