检查数组是否包含超过1个等效值

时间:2018-12-28 12:17:47

标签: java android

我有一个数组,其中我以一些学生的名字获取值,并且该数组是动态填充的,并且不包含静态值。现在,我要检查的是获得的数组是否具有相同的名称。这是我的代码的一部分

       ArrayList<Student> rows;

         for (Student name: rows) {

        }

我不知道如何检查。我已经使用了compartor,但是没有用。谁能帮忙。在数组中,我将获得所有学生姓名

4 个答案:

答案 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);
            }
        }
    }