恕我直言,您可以交换内循环和外循环(或 stream)并使用 filter 和 anyMatch 方法:
public static void main(String[] args) {
List<SubItem> list = List.of(
new SubItem("123", "111"),
new SubItem("234", "222"),
new SubItem("345", "333"),
new SubItem("456", "444"),
new SubItem("567", "123"),
new SubItem("678", "234"),
new SubItem("789", "345"));
List<SubItem> list2 = list.stream()
.filter(item1 -> list.stream()
.anyMatch(item2 -> item1.getStart()
.equals(item2.getStop())))
.collect(Collectors.toList());
// output
list2.forEach(System.out::println);
//SubItem{start='123', stop='111'}
//SubItem{start='234', stop='222'}
//SubItem{start='345', stop='333'}
}
public static class SubItem {
String start, stop;
public SubItem(String start, String stop) {
this.start = start;
this.stop = stop;
}
public String getStart() { return start; }
public String getStop() { return stop; }
@Override
public String toString() {
return "SubItem{start='" + start + "', stop='" + stop + "'}";
}
}