我有List<Student> stud1 = new ArrayList<Student>();
和List<Student> stud2 = new ArrayList<Student>();
并且Student
班级有姓名,地址等成员。
我要做的是,我必须列出 stud1 中的学生(如果stud1 的学生名称等于stud2 的学生名称)。
如何做到这一点?
我想知道,有没有像ListUtil这样的现有Java 库来解决这个问题?
我有List<Student> stud1 = new ArrayList<Student>();
和List<Student> stud2 = new ArrayList<Student>();
并且Student
班级有姓名,地址等成员。
我要做的是,我必须列出 stud1 中的学生(如果stud1 的学生名称等于stud2 的学生名称)。
如何做到这一点?
我想知道,有没有像ListUtil这样的现有Java 库来解决这个问题?
只需遍历它们并检查并继续添加结果列表如果你想优化它然后
创建地图
Map<String, List<Student>> dictionaryMapOfStudents;
然后选择HashMap
实现,只寻找名字匹配的学生,
例如
A Asdahd, Aasldfalf, Aero
B Baksd, Bajsr, Biro
所以现在你不会搜索完整列表,缩小搜索范围
这个例子可能对你有帮助
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 );
}
}
你可以做:
HashSet<String>
包含所有Student
s名称的 astud2
Student
in stud1
,检查他的名字是否在集合中,如果是,则将其添加到列表中以返回。那么有很多方法可以比较集合中的元素,如果您只需要比较可以迭代和比较两个列表中的名称的学生的姓名,但我认为实现 Comparable 并在您的 Student 类中创建您的 compare_to 方法更优雅.
更多信息在这里:http ://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Comparable.html
这里有一些算法给你:
您可以使用 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);
}
}
}
}