首页 > 解决方案 > Java 8流:通过对象中对象内部的属性获取对象列表

问题描述

我正在尝试执行以下操作:

我有一个用户列表,我想在一个 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有.BasketApplianceList

标签: java-8

解决方案


看来你想要这样的东西:

List<User> result =  usersList.stream()
            .filter(user -> user.getBasket().getApplianceList().stream()
                 .anyMatch(appliance -> 
                          appliance.getApplianceName().equals("something1")))
            .collect(Collectors.toList());

推荐阅读