我有一个具有以下属性的对象类:
@Slf4j
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class M3MachineSale {
private Integer OPCSHC;
private String OPITNO;
private String OPTRDT;
private Integer OPIVQT;
}
我想删除所有重复项。我使用过.distinct(),但它不会删除重复项,只会将列表中的重复项归还给我。
// Remove duplicates and objects with Product = PANT L
List<M3MachineSale> updatedM3MachineSaleList = m3MachineSaleList.stream()
.filter(m3MachineSale -> !m3MachineSale.getOPITNO().equals("PANT L"))
.collect(Collectors.toList());
我在做什么?我知道我有一些具有相同属性的对象,但我想从列表中删除这些对象,而不是返回重复项。
输入列表:
M3MachineSale(OPCSHC=123, OPITNO=5562, OPTRDT=20200821, OPIVQT=1)
M3MachineSale(OPCSHC=123, OPITNO=5562, OPTRDT=20200821, OPIVQT=1)
M3MachineSale(OPCSHC=456, OPITNO=3497, OPTRDT=20200821, OPIVQT=15)
M3MachineSale(OPCSHC=789, OPITNO=6663, OPTRDT=20200821, OPIVQT=4)
M3MachineSale(OPCSHC=456, OPITNO=3497, OPTRDT=20200821, OPIVQT=15)
输出应该是:
M3MachineSale(OPCSHC=123, OPITNO=5562, OPTRDT=20200821, OPIVQT=1)
M3MachineSale(OPCSHC=456, OPITNO=3497, OPTRDT=20200821, OPIVQT=15)
M3MachineSale(OPCSHC=789, OPITNO=6663, OPTRDT=20200821, OPIVQT=4)
我试过这样做来查找重复项:
private <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.FALSE) == null;
}
它返回了一个我有 605 个重复项的列表。白洞的例子
知道我该怎么做吗?感谢您的帮助!