假设我有一个名为System.out.println(myCombinedMap);
{1.0=10.0, 2.0=20.0, 3.0=30.0}
的对象,其中包含一个House
:
List<Room>
对于Room,只是一个属性public class House {
private List<Room> roomsList;
public House(List<Room> rooms) {
roomsList = rooms;
}
/*Getter and Setter*/
...
,其值由color
表示:
int
现在,使用Java 8,并给一个对象public calss Room {
private int color;
public Room(int c) {
color = c;
}
/*Getter and Setter*/
...
设置了一个House
,我知道如何基于一个List<Room>
在我的Room
中找到一个对象House
值color
,例如:
Room myRoom = house.getRooms.stream().filter(r -> r.getColor() == color).findFirst().orElse(null);
我想做的是,在给定List<House>
和值int c
的情况下,找到一个或多个House
,其属性为Room
color
等于c
在我的用例中,请明确一点:
List<House>
既不为null也不为空;
每个House
的{{1}}都不为null或为空;
每个List<Room>
都设置了属性Room
;
color
中的每个Room
都有唯一的颜色
最有可能(但不一定)只有1个House
和给定House
中的Room
我可以做这样的事情:
color
但是也许有更聪明和/或更直接的方法可以做到这一点?
答案 0 :(得分:0)
我可以想像以前曾问过类似的问题,诀窍是在下一个过滤器操作中:
private static Optional<House> test() {
List<House> houseList = Arrays.asList(
new House(new Room(1), new Room(3)),
new House(new Room(5))
);
int color = 5;
return houseList.stream()
.filter(h -> h.getRooms()
.stream()
.anyMatch(r -> r.getColor() == color))
.findFirst();
}
因此,在过滤器中,您具有第二个匹配项,用于检查内部列表。我确实对其进行了更改,以返回一个可选的而不是null的选项,但是可以随意应用对您有用的内容。