java-8 - Java 8流:通过对象中对象内部的属性获取对象列表
问题描述
我正在尝试执行以下操作:
- 我有 3 个对象
User
,Basket
并且Appliance
User
包含Basket
,Basket
包含 aList
ofAppliance
和Appliance
包含 aString applianceName
。
我有一个用户列表,我想在一个 Java 8 流中获取具有特定设备的用户。
代码:
Appliance appliance1 = new Appliance();
appliance1.setApplianceName("something1");
Appliance appliance2 = new Appliance();
appliance2.setApplianceName("something2");
Appliance appliance3 = new Appliance();
appliance3.setApplianceName("something3");
Appliance appliance4 = new Appliance();
appliance4.setApplianceName("something4");
List<Appliance> applianceList1 = new ArrayList<>();
applianceList1.add(appliance1);
applianceList1.add(appliance2);
applianceList1.add(appliance3);
applianceList1.add(appliance4);
List<Appliance> applianceList2 = new ArrayList<>();
applianceList2.add(appliance1);
applianceList2.add(appliance3);
Basket basket1 = new Basket();
basket1.setApple(1);
basket1.setApplianceList(applianceList1);
Basket basket2 = new Basket();
basket2.setApple(5);
basket2.setApplianceList(applianceList2);
User user1 = new User();
user1.setFirstmName("Jane");
user1.setLastName("Doe");
user1.setBasket(basket1);
User user2 = new User();
user2.setFirstmName("John");
user2.setLastName("Doe");
user2.setBasket(basket2);
List<User> usersList = new ArrayList<>();
usersList.add(user1);
usersList.add(user2);
我试过:
usersList.stream()
.map(User::getBasket)
.map(Basket::getApplianceList)
.flatMap(List::stream)
.map(Appliance::getApplianceName)
.filter(applianceName -> applianceName.equals("something1"))
.collect(Collectors.toList());
但是上面的代码返回了设备名称,我想要那个User
有.Basket
Appliance
List
解决方案
看来你想要这样的东西:
List<User> result = usersList.stream()
.filter(user -> user.getBasket().getApplianceList().stream()
.anyMatch(appliance ->
appliance.getApplianceName().equals("something1")))
.collect(Collectors.toList());
推荐阅读
- python - 使用python浏览目录?
- javascript - 在 page/frame/elementHandle 中 $eval & $$eval 在哪个上下文中执行?
- javascript - JS没有在复选框单击时切换div
- openshift - openshift-liberty : 未加载 jdbc 驱动程序
- json.net - 如何轻松确定 JsonConvert.DeserializeObject() 是否在我的对象中找到并设置每个属性?
- c# - 按月创建包含总计的数据表
- c - C中位反转函数的时间复杂度
- javascript - 使用屏幕大小查询和运行脚本
- scheme - 如何在这里正确地增加变量?
- node.js - npm 更新依赖问题