【问题标题】:Java 11 Lambda - check each object, return true when the first condition is met, else return false [duplicate]Java 11 Lambda - 检查每个对象,满足第一个条件时返回 true,否则返回 false [重复]
【发布时间】:2021-01-30 12:06:25
【问题描述】:

我有一个很好用的方法。这就是它的外观。

private boolean roomWithMoreThanTenFurnitures(Building building) {
if (building != null && building.hasRooms()) {
    for (Room room : building.getRooms()) {
        if (room.getFurnitures.size() > 10) {
            return true;
        }
    }   
}
return false;
}

我想把它切换到 Lambda。用shell进来了uo,但是不知道if(条件)return true或者return false外面是怎么填的。

building.getRooms().forEach(room -> {
//??
});

【问题讨论】:

    标签: java lambda java-11


    【解决方案1】:

    您不能这样做 - foreach 用于对每个集合/流元素执行某些操作,而不是用于过滤它们或映射到结果

    你需要例如anyMatch方法——例如

    building.getRooms().stream().anyMatch(room -> room.getFurnitures.size() > 10)
    

    【讨论】:

      【解决方案2】:

      你可以这样做。根据初始条件返回false,然后流式传输房间。这假定房间可以流式传输(例如列表)。如果它们是一个数组,您将需要执行类似于 Arrays.stream(building.getRooms())

      的操作
      private boolean roomWithMoreThanTenFurnitures(Building building) {
          if (building != null && building.hasRooms()) {
              return building.getRooms().stream()
                      .anyMatch(room -> room.getFurnitures.size() > 10);
                      
          }
          return false;
      }
      

      【讨论】:

      • 或者只是return building != null && building.hasRooms() && building.getRooms().stream() .anyMatch(room -> room.getFurnitures.size() > 10);
      猜你喜欢
      • 2021-01-15
      • 2010-11-13
      • 2021-04-22
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      • 2018-04-13
      • 2013-09-14
      • 1970-01-01
      相关资源
      最近更新 更多