比较不同对象的列表并使用Stream在java8中构建新的对象列表

星星

有人可以帮助我使用流将以下代码转换为 java 8 标准吗?

迭代 CustomerRelationship 列表和客户列表,比较 customerRelationShip firstName 和 customer firstName。如果匹配,则使用 customerRelationShip 和客户对象构造 BusinessCustomer 对象并将其添加到 businessCustomerList。如果没有匹配项,则使用 customerRelationShip 构造 BusinessCustomer 并将其添加到 businessCustomerList。

List<BusinessCustomer> businessCustomers = new ArrayList<BusinessCustomer>();

List<CustomerRelationship> customerRelationshipList = new ArrayList<CustomerRelationship>();

       List<Customer> customerList = new ArrayList<Customer>();

        for (CustomerRelationship customerRelationship: customerRelationshipList) {
            int temp = 0;
            for (Customer customer:customerList){
                if(customer.getFirstName().equalsIgnoreCase(customerRelationship.getFirstName()))
                {
                    temp++;
                    BusinessCustomer b = new BusinessCustomer();
                    b.setAge(customer.getAge());
                    b.setFirstName(customerRelationship.getFirstName());
                    b.setLastName(customerRelationship.getLastName());
                    businessCustomers.add(b);
                }
            }
            if(temp == 0) {
                BusinessCustomer b = new BusinessCustomer();                
                b.setFirstName(customerRelationship.getFirstName());
                b.setLastName(customerRelationship.getLastName());
                businessCustomers.add(b);
            }
        }

我已经使用流开发了这样的东西。

List<CustomerRelationship> customerRelationshipList = Fetch from the Table (CustomerRelationship)
       List<Customer> customerList = Fetch from the Table (Customer)
       List<BusinessCustomer> businessCustomers = customerRelationshipList.stream()
                .flatMap(c -> customerList.stream()
                .filter((d -> (c.getFirstName()
                                .equals(d.getFirstName()))
                        ))
                        .map(d -> new BusinessCustomer(c.getFirstName(),c.getLastName(),d.getAge()))
                .collect(Collectors.toList());

仅当 customerRelationship firstName 与 customer firstName 匹配时,上面的代码才会创建 businessCustomers。期望是:即使没有匹配项,我也想通过使用 customerRelationship 对象来创建 businessCustomers(请检查上面执行此操作的 foreach 代码)。

马修·米查姆

我相信以下两种方法中的任何一种都有效:

第一个使用Stream.concat它使您能够将两个流放在一起。

    Stream<BusinessCustomer> matches = customerRelationships.stream()
            .flatMap(relationship -> customers.stream()
                    .filter(customer -> customer.getFirstName().equalsIgnoreCase(relationship.getFirstName()))
                    .map(customer -> new BusinessCustomer(relationship.getFirstName(), relationship.getLastName(), customer.getAge())));

    Stream<BusinessCustomer> nonMatches = customerRelationships.stream()
            .filter(relationship -> customers.stream().noneMatch(customer -> customer.getFirstName().equalsIgnoreCase(relationship.getFirstName())))
            .map(relationship -> new BusinessCustomer(relationship.getFirstName(), relationship.getLastName()));

    List<BusinessCustomer> result = Stream.concat(matches, nonMatches)
            .collect(Collectors.toList());

你可以或者不能创建两个中间matchesnonMatchesStream对象,只是把在这些发言Stream.concat

我认为可行的另一种方法如下:

    customerRelationships.stream()
            .flatMap(relationship -> {
                boolean noneMatch = customers.stream().noneMatch(customer -> customer.getFirstName().equalsIgnoreCase(relationship.getFirstName()));
                if (noneMatch) {
                    return Stream.of(new BusinessCustomer(relationship.getFirstName(), relationship.getLastName()));
                } else {
                    return customers.stream()
                            .filter(customer -> customer.getFirstName().equalsIgnoreCase(relationship.getFirstName()))
                            .map(customer -> new BusinessCustomer(relationship.getFirstName(), relationship.getLastName(), customer.getAge()));
                }
            })
            .collect(Collectors.toList());

另外,我还没有测试这两种方法,所以一定要通过你自己的一组测试来运行它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Java8 Stream计算列表中的对象数

来自分类Dev

使用Java 8流将2个不同对象的列表连接到第三个对象的列表

来自分类Dev

使用Java 8流将2个不同对象的列表连接到第三个对象的列表

来自分类Dev

比较2个具有不同对象的列表Java返回不匹配的列表

来自分类Dev

连接不同对象的列表

来自分类Dev

比较两个不带for循环的不同对象列表

来自分类Dev

列表中的相同对象

来自分类Dev

根据属性值检索列表中的不同对象

来自分类Dev

如何在python中打印不同对象的列表?

来自分类Dev

Java8流使用流畅的API减少对象列表

来自分类Dev

Java8流使用流畅的API减少对象列表

来自分类Dev

如何比较powershell中的不同对象

来自分类Dev

比较2个列表,然后使用Java8将匹配项添加到对象映射中

来自分类Dev

比较两个不同对象但具有相同字段的列表

来自分类Dev

比较不同对象但具有相同字段的2个列表

来自分类Dev

比较两个对象列表并通过比较java 8中两个列表的一个属性形成一个新列表

来自分类Dev

从列表中的两个不同对象返回LINQ select查询中的特定对象

来自分类Dev

使用Java8 Streams从另外两个列表创建对象列表

来自分类Dev

如何从两个不同对象列表中获取不常见对象

来自分类Dev

Java中不同对象之间的关系

来自分类Dev

比较相同对象类型的 2 个列表

来自分类Dev

Java 比较对象列表以查找重复项并将它们放入新列表中

来自分类Dev

如何在Java 8中使用concat获取对象的不同列表

来自分类Dev

从java中的列表中获取不同的对象

来自分类Dev

反序列化不同对象的列表

来自分类Dev

如何合并两个不同对象的列表?

来自分类Dev

如何使方法适用于不同对象的列表?

来自分类Dev

xmlSerialize不同对象的两个列表

来自分类Dev

对具有不同对象的数组列表进行排序

Related 相关文章

  1. 1

    使用Java8 Stream计算列表中的对象数

  2. 2

    使用Java 8流将2个不同对象的列表连接到第三个对象的列表

  3. 3

    使用Java 8流将2个不同对象的列表连接到第三个对象的列表

  4. 4

    比较2个具有不同对象的列表Java返回不匹配的列表

  5. 5

    连接不同对象的列表

  6. 6

    比较两个不带for循环的不同对象列表

  7. 7

    列表中的相同对象

  8. 8

    根据属性值检索列表中的不同对象

  9. 9

    如何在python中打印不同对象的列表?

  10. 10

    Java8流使用流畅的API减少对象列表

  11. 11

    Java8流使用流畅的API减少对象列表

  12. 12

    如何比较powershell中的不同对象

  13. 13

    比较2个列表,然后使用Java8将匹配项添加到对象映射中

  14. 14

    比较两个不同对象但具有相同字段的列表

  15. 15

    比较不同对象但具有相同字段的2个列表

  16. 16

    比较两个对象列表并通过比较java 8中两个列表的一个属性形成一个新列表

  17. 17

    从列表中的两个不同对象返回LINQ select查询中的特定对象

  18. 18

    使用Java8 Streams从另外两个列表创建对象列表

  19. 19

    如何从两个不同对象列表中获取不常见对象

  20. 20

    Java中不同对象之间的关系

  21. 21

    比较相同对象类型的 2 个列表

  22. 22

    Java 比较对象列表以查找重复项并将它们放入新列表中

  23. 23

    如何在Java 8中使用concat获取对象的不同列表

  24. 24

    从java中的列表中获取不同的对象

  25. 25

    反序列化不同对象的列表

  26. 26

    如何合并两个不同对象的列表?

  27. 27

    如何使方法适用于不同对象的列表?

  28. 28

    xmlSerialize不同对象的两个列表

  29. 29

    对具有不同对象的数组列表进行排序

热门标签

归档