如何解决如何从列表中删除重复项?
我有一个具有以下属性的对象类:
@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,OPIVQT=1)
M3MachineSale(OPCSHC=456,OPITNO=3497,OPIVQT=15)
M3MachineSale(OPCSHC=789,OPITNO=6663,OPIVQT=4)
M3MachineSale(OPCSHC=456,OPIVQT=15)
输出应为:
M3MachineSale(OPCSHC=123,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个重复项。 Baekdung
中的示例有人知道我该怎么做吗?感谢您的帮助!
解决方法
在圣诞树上的龙目岛注释中,您忘记了@EqualsAndHashCode
,这使得不可能进行重复数据删除。
我建议您将批次减少到@Data @Slf4j @NoArgsConstructor @AllArgsConstructor
,以完成所有操作。
尝试这种方法。我能够在collect()之前使用distinct()删除重复项。
List<M3MachineSale> updatedM3MachineSaleList = m3MachineSaleList.stream()
.filter(m3MachineSale -> !m3MachineSale.getOPITNO().equals("PANT L"))
.distinct().collect(Collectors.toList());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。