试图从结构的产品清单,并避免大量的循环和IFS的结构,所以我想用Stream
流和过滤器列表
例如,让我们有以下结构:
class House {
List<Family> familyList;
}
class Family {
List<Person> personList;
String someInfo;
}
class Person {
String name;
int age;
List<Item> itemList;
}
class Item{
String name;
}
我想创建:
List<Item>
从家庭List<Item>
从法米尔通过名称- 列表过滤IES
from house, which contain only records filtered by
Item`name
到目前为止我尝试以下:
列表testItems = house1.familyList.stream()flatMap(F - > F。。 personList.stream()。flatMap(p - > p.itemList.stream())) .collect(Collectors.toList()); List testItems = house1.familyList.stream()。flatMap(f - > f.personList.stream())。flatMap(p-> p.itemList.stream()) .collect(Collectors.toList());
List testItemsFiltered = house1.familyList.stream()。flatMap(f - > f.personList.stream()。flatMap(p - > p.itemList.stream()。filter(item-> item.name .equals(“Hammer”)))) .collect(Collectors.toList());
但两者都扔nullpointers
为3变种我不知道到目前为止
凯文编辑:
检查:familiList包含几个Item
以名字 - “物品1”,“ITEM2 ”, “项目3”
List<Family> filteredFamilies = house1.familyList.stream()
.filter(f -> f.personList.stream()
.anyMatch(p ->p.itemList.stream()
.anyMatch(i -> i.name.equals("item1"))))
.collect(Collectors.toList());
for (Family family : filteredFamilies) {
for (Person p : family.personList) {
for (Item i : p.itemList) {
System.out.println(i.name);
}
}
}
结果:
item1
item2
item2
item3
item1
item2
item2
item3
befor过滤:
F1-
_p1- IT1,IT2
_p2- IT2,IT3,IT4
F2
_p3- IT1,I2
_p4 I3
F3
_p5 i5
过滤后:
F1-
P1-IT1
F2
P3- IT1
您的列表为空或null? –
..我忘了给Person对象指定列表,但仍然不知道3.点 – sala
问题是,这些家庭是否有包含这些项目的人?通常你应该检查其他方式。创建一个没有item1的家庭,然后检查“filteredFamilies”是否确实包含那些 –