有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

comparator java对象列表比较

我正在吃List<Student> stud1 = new ArrayList<Student>();List<Student> stud2 = new ArrayList<Student>();

而且Student类的成员有nameaddress

我要做的是,我必须列出stud1中的学生(如果stud1的学生名等于stud2的学生名

如何做到这一点

我想知道,是否有任何现有的java库ListUtil可以解决这个问题


共 (6) 个答案

  1. # 1 楼答案

    可以使用HashSet进行查找名称匹配:

    class Student {
        private String name;
        private String address;
    
        public Student(String name, String address) {
            this.name = name;
            this.address = address;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    }
    
    public class Program {
        public static void main(String[] args) {
            List<Student> s1 = new ArrayList<Student>();
            List<Student> s2 = new ArrayList<Student>();
    
            // generate data
            for (int i = 0; i < 5; i++) {
                Student s = new Student("Student" + i, "");
                s1.add(s);
            }
            for (int i = 0; i < 10; i++) {
                Student s = new Student("Student" + i, "");
                s2.add(s);
            }
    
            // create a lookup HashSet
            Set<String> nameSet = new HashSet<String>();
            for (Student s : s2) {
                nameSet.add(s.getName());
            }
    
            List<Student> result = new ArrayList<Student>();
            // perform lookup
            for (Student s : s1) {
                if (nameSet.contains(s.getName())) {
                    // add the matching student to the result list
                    result.add(s);
                }
            }
        }
    }
    
  2. # 2 楼答案

    这个例子可能对你有所帮助

    import java.util.Collection;
    import java.util.ArrayList;
    import java.util.Arrays;
    
    public class Repeated {
    public static void main( String  [] args ) {
        Collection listOne = new ArrayList(Arrays.asList("milan","dingo", "elpha", "hafil", "meat", "iga", "neeta.peeta"));
        Collection listTwo = new ArrayList(Arrays.asList("hafil", "iga", "binga", "mike", "dingo"));
    
        listOne.retainAll( listTwo );
        System.out.println( listOne );
    }
    

    }

  3. # 3 楼答案

    你可以做:

    1. 构造一个HashSet<String>包含stud2Student的所有名称
    2. 对于stud1中的每个Student,检查他的名字是否在集合中,如果在集合中,则将其添加到列表中以返回
  4. # 5 楼答案

    以下是一些算法:

    • 为stud3创建数组列表
    • 基于stud1从int i=0到i=(stud1.size()-1)的循环
      • 基于stud2从int j=0到j=(stud2.size()-1)的循环
        • 检查是否有问题。得到(我)。getName()等于stud2。得到(j)。getName()
          • 检查是否有stud1。已经开始学习了
            • 继续
          • 否则
            • 添加stud1。开始学习
  5. # 6 楼答案

    只需迭代它们,检查并不断添加一个结果列表 如果你想优化它

    创建地图

    Map<String, List<Student>> dictionaryMapOfStudents;
    

    然后选择HashMap实现,只查找那些名字匹配的学生

    比如说

    A Asdahd, Aasldfalf, Aero
    B Baksd, Bajsr, Biro
    

    所以现在你不会搜索完整的列表,缩小搜索范围