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