从列表 <object> 中获取所有对象,其中 id 包含在列表 <long> 中

Get All object from a list <object> which id contains in List<long>

如何从另一个 List<Object>allObjects 中获取 List<Object> filteredList 其 ID (Object.id) 包含在给定的 List<id> idsList 中。 考虑到中等数据量,就时间而言,解决此问题的有效方法是什么。

我正在使用 java6

I don't want to iterate both the list so many times

为什么?过早的优化是一件坏事。先测试一下,衡量是否足够高效,解决问题如果存在.

您可以使用简单的过滤器通过流完成此操作:

class Student
{
    long id;
}

final List<Student> students = /*something*/;
final List<Long> rollNoList = /*something*/;

List<Student> newStudents = students.stream()
                                    .filter(student -> rollNoList.contains(student.id))
                                    .collect(Collectors.toList());

用流来做的好处是你以后可以并行化它。


另一个优化是检查您对数据结构的使用。正如 Seelenvirtuose 指出的那样,使用 HashSet 之类的东西会将 contains 的复杂性从 O(n) 降低到 O(1):

final Set<Long> rollNoList = new HashSet<>();

如果您不能这样做,您也可能会看到一些性能提升,但会增加内存使用量,方法是在过滤之前将 List 复制到 HashSet

final Set<Long> rollNumbers = new HashSet<>(rollNoList);

但是如果你能控制数据结构,从头开始就用HashSet