我有一个数组,其中我以一些学生的名字获取值,并且该数组是动态填充的,并且不包含静态值。现在,我要检查的是获得的数组是否具有相同的名称。这是我的代码的一部分
ArrayList<Student> rows;
for (Student name: rows) {
}
我不知道如何检查。我已经使用了compartor,但是没有用。谁能帮忙。在数组中,我将获得所有学生姓名
答案 0 :(得分:1)
使用列表存储任何重复的名称:
List<String> dups = new ArrayList<>();
以及用于存储名称的集合:
Set<String> names = new HashSet<>();
一组仅包含唯一值。
现在遍历您的列表
(我猜您的Student
班有一种类似getName()
的方法来获取学生的姓名):
for (Student student : rows) {
String studentname = student.getName();
if (!names.add(studentname) {
dups.add(studentname);
}
}
当无法将某项添加到集合中时,方法names.add()
返回false
,因为该项已经存在。
因此,当它返回false
时,它遇到一个重复的名称,并且该名称已添加到dups
列表中。
完成此循环后,您可以在dups
列表中找到所有重复的学生姓名,并在烤面包中显示它们:
if (dups.size() > 0) {
StringBuilder sb = new StringBuilder("There are duplicates: ");
for (String studentname : dups) {
sb.append(studentname).append(", ");
}
String msg = sb.toString();
msg = msg.substring(0, msg.length() - 2);
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
答案 1 :(得分:0)
将数据存储在HashMap中,其键为StudentName,值作为Student对象
Map studentMap = new HashMap <>()
如果再次使用相同的键添加数据,则数据将被更新
studentMap.put(学生姓名,学生)
要检查密钥是否存在并进行相应更新
如果(studentMap.containsKey(studentName)){ //逻辑(如果密钥已经存在) }其他{ //逻辑,如果密钥不存在 }
如果要列表而不是map,请从地图中获取列表
列表studentList =新的ArrayList(studentMap.values())
答案 2 :(得分:0)
一种检查方法是将列表转换为集合并检查大小是否减小(因为Set
不接受重复值),例如:
ArrayList<Student> rows;
Set<Student> set = new HashSet<Student>(rows);
if(set.size() < rows.size()){
// In this case you have repeated values in the list
}
请注意,这取决于equals
类的Student
方法来确定学生的比较方式,因此,由于您要再次检查学生的姓名,因此您的内部可能会有此equals
方法Student
类:
@Override
public boolean equals(Object obj) {
if( obj instanceof Student) {
return (obj.name.equals(name));
}
return false;
}
答案 3 :(得分:0)
检查此示例Java类,该类用于不计算重复元素。
public class CountDuplicate {
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("aaa");
arrayList.add("bbb");
arrayList.add("aaa");
arrayList.add("bbb");
arrayList.add("ccc");
arrayList.add("bbb");
arrayList.add("ccc");
arrayList.add("aaa");
arrayList.add("ccc");
arrayList.add("bbb");
HashSet<String> hsUnique = new HashSet<String>(arrayList);
for (String str : hsUnique) {
System.out.println(Collections.frequency(arrayList, str) +" times "+ str);
}
}
}