我有一个包含对象(id,name)的数组列表。如果列表中有重复的名称,则需要删除
如果重复,我只需要打印一次名称
答案 0 :(得分:3)
如果您不希望列表中有重复条目,请使用SET:
注意:您必须覆盖对象(ID,Name)中的equals和hashcode,否则您将在SET中找到重复的对象
答案 1 :(得分:0)
public static boolean checkDuplicate(ArrayList list) {
HashSet set = new HashSet();
for (int i = 0; i < list.size(); i++) {
boolean val = set.add(list.get(i));
if (val == false) {
return val;
}
}
return true;
}
答案 2 :(得分:0)
请改用java.util.Set
。它不能包含重复项。
参考:http://docs.oracle.com/javase/6/docs/api/java/util/Set.html
Set<String> myNames = new HashSet<String>();
myNames.add("JAMES");
myNames.add("ELLA");
myNames.add("JAMES");
myNames.size() // will return 2
答案 3 :(得分:0)
使用Set数据结构实现适当的Comparator。运行循环并将对象放入该集合中。打印此套装。
答案 4 :(得分:0)
Arraylist提供了一个迭代器,允许从列表本身中删除迭代器返回的最后一个元素。所以我们只是跟踪我们已经看过的名字。 Set
实施很有帮助。
Set<String> names = new HashSet<>();
Iterator<MyType> it = getListFromSomewhere().iterator(); // you know how
while(it.hasNext()) {
if (!names.add(it.next().getName()) {
it.remove();
}
}
提示:如果值已经在集合中,则添加到集合将返回false。
说明
您的要求不是那么明确:此处我们将第一个条目保留为名称,并从列表中删除所有以下条目。如果列表没有按id排序,那么它是相当随机的,保留了哪些条目被删除。
答案 5 :(得分:0)
您可以在设置以及列表系列
的帮助下完成此操作我们已经了解了如何使用设置系列删除重复项。我们也可以在列表系列的帮助下完成。请参考以下代码。
package com.rais.util;
import java.util.ArrayList;
import java.util.List;
/**
* @author Rais.Alam
* @project Utils
* @date Dec 18, 2012
*/
public class ConverterUtil
{
/**
* @param args
*/
public static void main(String[] args)
{
List<String> original = new ArrayList<String>();
original.add("Tomcat");
original.add("Jboss");
original.add("GlassFish");
original.add("Weblogic");
original.add("Tomcat");
List<String> newList = removeDuplicates(original);
for (String value : newList)
{
System.out.println(value);
}
}
public static List<String> removeDuplicates(List<String> original)
{
List<String> tempList = new ArrayList<String>();
for (String value : original)
{
if (!tempList.contains(value))
{
tempList.add(value);
}
}
return tempList;
}
}