Java 如何比较列表中的所有元素?

Java 如何比较列表中的所有元素?,java,lambda,java-stream,Java,Lambda,Java Stream,如何在Java lambda流中做到这一点,避免重复 List tempSplitFilesList=newarraylist; List splitFilesList=newarraylist; 对于子项item1:tempSplitFilesList{ 对于子项item2:TempSplitFileList{ 如果item1.getStop.EqualItem2.getStart{ splitFilesList.additem2; } } } 对。但我不会说它比你拥有的更好。你所拥有的也包含

如何在Java lambda流中做到这一点,避免重复

List tempSplitFilesList=newarraylist; List splitFilesList=newarraylist; 对于子项item1:tempSplitFilesList{ 对于子项item2:TempSplitFileList{ 如果item1.getStop.EqualItem2.getStart{ splitFilesList.additem2; } } }
对。但我不会说它比你拥有的更好。你所拥有的也包含重复的东西,就像这样

List<SubItem> splitFilesList = tempSplitFilesList.stream()
        .flatMap(item1 -> tempSplitFilesList.stream()
                .filter(item2 -> item1.getStop()
                        .equals(item2.getStart()))) // .distinct() if no dups
        .collect(Collectors.toList());

如果要消除重复项,可以在筛选器之后放置.distinct方法调用。这将起作用,因为即使在默认情况下,如果比较相同的对象,equals也将返回true。

imo您可以交换内部和外部循环或流,并使用和方法:

公共静态无效字符串[]args{ List=List.of 新的分项123、111、, 新的分项234222, 新的分项345333, 新的分项456444, 新的分项567123, 新的子项678234, 新的分项789345; List list2=List.stream .filteritem1->list.stream .anyMatchitem2->item1.getStart .equalsitem2.getStop .toList; //输出 列表2.forEachSystem.out::println; //子项{start='123',stop='111'} //子项{start='234',stop='222'} //子项{start='345',stop='333'} } 公共静态类子项{ 字符串开始、停止; 公共子项字符串开始,字符串停止{ this.start=start; this.stop=停止; } 公共字符串getStart{return start;} 公共字符串getStop{return stop;} @凌驾 公共字符串toString{ 返回子项{start='+start+',stop='+stop+'}; } }