【问题标题】:How to write proper java streams [closed]如何编写正确的java流[关闭]
【发布时间】:2021-07-28 05:02:49
【问题描述】:

我在下面的代码 sn-p 中尝试从 bean 中消除 null id 并使用比较器进行排序。我想使用 java 流来简化实现,有人可以指点一下我如何将下面的 sn-p 转换为流。

  private List<User> validateSort(List<User> users) {
    List<User> validUserList = new ArrayList<>();
    for (User user : users) {
      if (user.getUserId() != null) {
        validUserList.add(user);

      }
    }
    validUserList.sort(Comparator.comparing(User::getUserId));
    return validUserList;
  }

【问题讨论】:

    标签: java stream java-stream


    【解决方案1】:

    你会想看看以下方法并用它构建Stream

    【讨论】:

    • 这就是 Java 流的全部内容。不错!!!
    【解决方案2】:
    users.stream().filter(user -> user.getUserId() != null).sorted(Comparator.comparing(User::getUserId)).toList()
    
    1. 过滤null 用户ID。
    2. 使用非空用户 ID 进行排序。
    3. 将其作为列表返回。

    【讨论】:

    • 不错的一个。每个习惯于处理 Java 流的 Java 开发人员都有或多或少相同的想法。 Java 流是多么强大的工具,不是吗?
    • 他们让事情变得简单。
    【解决方案3】:

    这是您正在寻找的示例。我不确定你的 User 类是怎么回事,但为了简洁起见,我只是用唯一的 userId 字段定义。
    基本上,要完成的步骤是:

    1. 从列表中获取流
    2. 过滤所有具有非空用户 ID 的元素(用户)
    3. 根据userId 应用所需的比较器
    4. 收集列表中的所有剩余元素

    以下是您也可以用于测试的代码:

    import java.util.Comparator;
    import java.util.List;
    import java.util.stream.Collectors;
    
    class User {
        Long userId;
        
        public User() {}
        
        public User(Long userId) {
            this.userId = userId;
        }
    
        public Long getUserId() {
            return userId;
        }
    
        public void setUserId(Long userId) {
            this.userId = userId;
        }
        
        public String toString() {
            return "id="+userId;
        }
    }
    
    public class MyClass {
        
        public static void main(String[] args) {
            List<User> unsortedList = List.<User>of(new User((long)100), 
                                                      new User(), 
                                                      new User((long)500), 
                                                      new User((long)50), 
                                                      new User((long)33), 
                                                      new User());
            
            System.out.println("Unsorted List: " + unsortedList);
            
            List<User> validatedList = new MyClass().validateSort(unsortedList);
            
            System.out.println("Validated List: " + validatedList);
        }
    
        private List<User> validateSort(List<User> users) {
            return users.stream()
                        .filter(u -> u.getUserId() != null)
                        .sorted(Comparator.comparing(User::getUserId))
                        .collect(Collectors.toList());
          }
    }
    

    这是输出:

    Unsorted List: [id=100, id=null, id=500, id=50, id=33, id=null]
    Validated List: [id=33, id=50, id=100, id=500]
    

    【讨论】:

      猜你喜欢
      • 2017-03-29
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      • 2014-10-20
      • 2020-05-24
      • 2019-08-29
      相关资源
      最近更新 更多