本文共 2911 字,大约阅读时间需要 9 分钟。
在Java项目中处理集合中的重复对象是一个常见问题,尤其是在没有主键的情况下。以下是一些有效的解决方案:
这种方法虽然效率较低,但简单易懂,适合小规模的数据处理。
public static void main(String[] args) { ListpenBeanList = new ArrayList<>(); penBeanList.add(new PenBean("铅笔", "black")); penBeanList.add(new PenBean("铅笔", "white")); penBeanList.add(new PenBean("铅笔", "black")); penBeanList.add(new PenBean("中性笔", "white")); penBeanList.add(new PenBean("中性笔", "white")); List newPenBeanList = new ArrayList<>(); for (PenBean penBean : penBeanList) { boolean isSame = false; for (PenBean newPenBean : newPenBeanList) { if (penBean.getType().equals(newPenBean.getType()) && penBean.getColor().equals(newPenBean.getColor())) { isSame = true; break; } } if (!isSame) { newPenBeanList.add(penBean); } } System.out.println("=========新数据======"); for (PenBean penBean : newPenBeanList) { System.out.println(penBean.toString()); }}
在使用contains()
方法之前,确保PenBean类重写了equals()
方法:
@Overridepublic boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; PenBean penBean = (PenBean) o; return Objects.equals(type, penBean.type) && Objects.equals(color, penBean.color);}
然后在主函数中使用contains()
进行去重:
public static void main(String[] args) { ListpenBeanList = new ArrayList<>(); // 添加重复元素 // ... List newPenBeanList = new ArrayList<>(); for (PenBean penBean : penBeanList) { if (!newPenBeanList.contains(penBean)) { newPenBeanList.add(penBean); } } // 输出结果 System.out.println("=========新数据======"); for (PenBean penBean : newPenBeanList) { System.out.println(penBean.toString()); }}
利用Java 8的流式写法进行去重:
public static void main(String[] args) { ListpenBeanList = new ArrayList<>(); // 添加重复元素 // ... List newPenBeanList = penBeanList.stream() .distinct() .collect(Collectors.toList()); // 输出结果 System.out.println("=========新数据======"); for (PenBean penBean : newPenBeanList) { System.out.println(penBean.toString()); }}
HashSet集合天然支持唯一性,可以直接添加元素:
public static void main(String[] args) { ListpenBeanList = new ArrayList<>(); // 添加重复元素 // ... Set set = new HashSet<>(penBeanList); List newPenBeanList = new ArrayList<>(set); // 输出结果 System.out.println("=========新数据======"); for (PenBean penBean : newPenBeanList) { System.out.println(penBean.toString()); }}
确保PenBean类的equals()
和hashCode()
方法被正确重写,以确保集合操作能够正确识别重复元素。根据项目需求选择合适的方法,以确保性能和正确性。
转载地址:http://czufk.baihongyu.com/