从 List<Student> 中获取具有匹配名称的学生对象而不进行迭代(Java)
Posted
技术标签:
【中文标题】从 List<Student> 中获取具有匹配名称的学生对象而不进行迭代(Java)【英文标题】:Fetch Student object from List<Student> with matching name without iterating (Java) 【发布时间】:2015-11-05 21:28:29 【问题描述】:我有一个List<Student>
和String firstName="George"
。我想从与"George"
匹配的列表中提取学生对象而不迭代列表。有可能吗?
可能需要某些方法覆盖或任何使其工作的方法。
public Class Student
private String firstName;
private String lastName;
private String class;
// getter, setter methods goes here....
请帮帮我,谢谢。
【问题讨论】:
使用Map
。其他任何事情都是以某种方式迭代的一种形式
你尝试过什么吗?
Java List.contains(Object with field value equal to x) 的可能重复项
@madprogrammer 是对的。你需要一个Map<String, Student>。
不能使用List
【参考方案1】:
如果您使用的是 Java 8,那么可以使用 Stream 和 Lambda:-
List<Student> myStudent = studentsList.stream()
.filter(s -> s.name.equals("George"))
.collect(Collectors.toList());
【讨论】:
从技术上讲,它仍然是一种迭代形式 如果我们有一个列表,除了迭代搜索特定对象之外别无他法。我们能做的最好的事情就是让您的搜索更有效率。 然后对列表进行排序并使用某种二进制搜索:P 或使用Map
【参考方案2】:
您应该使用哈希映射而不是 List ,并将学生姓名添加为对象的键。 HashMap=新的HashMap;
【讨论】:
【参考方案3】:你可以重写 equal() 方法 然后用 firstname="George" 创建一个 Student 对象 当你这样做时,你可以使用 list.indexOf(Student_object) 方法来找出该对象的位置,你可以使用 list.get(index) 来获取列表中的学生对象
【讨论】:
但是你不能使用list.indexOf("George")
并且在内部,它仍然是一种迭代形式
我的意思是创建新对象 Student 并且 setFirstname 是“George”。有了这个,至少我们不必使用循环
我知道你的意思,但我有理由确定这不是 OP 在内部寻找的东西,它仍在使用某种迭代。 Map
将是唯一不需要在另一个级别进行某种形式的迭代的解决方案,只是说;)
这就是我实现的方式,我认为无需创建新的 Student().setFirstName("George") 就可以通过 .contains("George") 实现。感谢您的所有回复。【参考方案4】:
不,您必须迭代.. list 就是这样。如果你想在 O(1) 中进行检索,那么你需要一张地图。
【讨论】:
以上是关于从 List<Student> 中获取具有匹配名称的学生对象而不进行迭代(Java)的主要内容,如果未能解决你的问题,请参考以下文章
从excel表格读取数据用Java代码实现批量上传写入数据库
java ArrayList 如何读取文件中的数据,并且搜索