所以首先在描述中你说的是
火车具有属性 ID、颜色、Wagon。
但是,在后面的例子中:
finalList = trains.stream()
.filter(tr -> wagons.stream()
.anyMatch(wg ->tr.getWagons()
.foreach(trWg -> trWg.getId().equals(wg.getId()))));
因此我假设第一个是真的,出于某种原因你的火车现在只能有一辆货车
这个“问题”有几种解决方案:
我认为第一个也是最干净的方法:
List<Wagon> wagons = new ArrayList<>();
wagons.add(new Wagon(0L, new ArrayList<>(), "0"));
wagons.add(new Wagon(1L, new ArrayList<>(), "1"));
List<Train> trains = new ArrayList<>();
trains.add(new Train(0L, wagons.get(0), "Yellow"));
trains.add(new Train(1L, wagons.get(1), "Blue"));
trains.add(new Train(2L, new Wagon(12L, new ArrayList<>(), "not in wagon list"), "Blue"));
List<Train> finalList = trains.stream().
filter(train -> wagons.contains(train.getWagon()))
.collect(Collectors.toList());
finalList.forEach(System.out::println);
和ofc POJO的
@Getter
@AllArgsConstructor
@ToString
class Train {
private Long id;
private Wagon wagon;
private String color;
}
@Getter
@ToString
@AllArgsConstructor
@EqualsAndHashCode
class Wagon {
private Long id;
private List<String> seats;
private String type;
}
但你必须记住这里实现equals() 为Wagon
无需实现equals()的第二种方法是:
List<Train> finalList2 = trains.stream()
.filter(train -> wagons
.stream()
.anyMatch(wagon -> wagon.getId().equals(train.getWagon().getId())))
.collect(Collectors.toList());
现在假设您的火车可以有不止一辆货车...
@Getter
@AllArgsConstructor
@ToString
class Train {
private Long id;
private List<Wagon> wagons;
private String color;
}
还有代码:
List<Wagon> wagons = new ArrayList<>();
wagons.add(new Wagon(0L, new ArrayList<>(), "0"));
wagons.add(new Wagon(1L, new ArrayList<>(), "1"));
List<Wagon> wagons2 = new ArrayList<>();
wagons2.add(new Wagon(11L, new ArrayList<>(), "11"));
wagons2.add(new Wagon(12L, new ArrayList<>(), "12"));
List<Train> trains = new ArrayList<>();
trains.add(new Train(0L, wagons,"Yellow"));
trains.add(new Train(1L, wagons2, "Blue"));
trains.add(new Train(2L, Arrays.asList(new Wagon(132L, new ArrayList<>(),"not in wagon list")), "Blue"));
List<Train> finalList3 = trains.stream()
.filter(train -> train.getWagons().containsAll(wagons))
.collect(Collectors.toList());
finalList3.forEach(System.out::println);
只要您假设,您只对包含精确货车组的火车感兴趣。而equals()也是这个方法所必需的!