java - 如何使用 Java 流比较多个嵌套对象中的值来删除重复项

标签 java java-stream

我有一个包含多个嵌套对象的复杂对象列表。我需要比较复杂对象中的 4 个元素以确定它是否重复并将其删除。 这是要比较重复项的复杂对象和元素

 - Segment       
   * Billing (string) - element to compare for duplication
   * Origin (object)
         number (int)  - element to compare for duplication    
         string1    
         string2      
   * Destination  (object)    
         number (int)  - element to compare for duplication    
         string1    
         string2      
    * Stop    (object)
         number (int)  - element to compare for duplication    
         string1    
         string2  
...other elements

这是伪代码... 我想做,但看起来我不能像这样使用 flatMap 以及如何访问展平对象的不同元素以及比嵌套对象高一级的元素。

List<Segment> Segments = purchasedCostTripSegments.stream()
   .flatMap(origin -> Stream.of(origin.getOrigin()))
   .flatMap(destination -> Stream.of(origin.getDestination()))
   .flatMap(stop -> Stream.of(origin.getStop()))
   .distinctbyKey(billing, originNumber, destinationNumber, stopNumber).collect(Collectors.toList());

也许这不是最好的方法......

最佳答案

考虑到您已经知道 Java 8 Distinct by property以及补救措施,您也可以扩展解决方案以通过多个属性查找不同的内容。您可以使用 List 来比较以下元素:

List<Segment> Segments = purchasedCostTripSegments.stream()
        .filter(distinctByKey(s -> Arrays.asList(s.getBilling(),s.getOrigin().getNumber(),
               s.getDestination().getNumber(),s.getStop().getNumber())))
        .collect(Collectors.toList());

关于java - 如何使用 Java 流比较多个嵌套对象中的值来删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62575869/

相关文章:

java - 如何从java流中只返回一个字符串

具有可从方法调用的三个参数的 Java 函数

java - 在像 Stream.reduce() 这样的 API 中选择不变性的充分理由是什么?

java - 使用事务性 dao 保存临时实体

java - 将IP从服务器发送到客户端。 Java网络

java - 如何在 Jena 中创建自定义的内置函数?

Java 8 流从 List 中的 Map 读取值

java - intellij idea中设置tomcat的问题

java - log4j - 日志旋转未清除旋转器日志

java - 流在过滤器中抛出异常