从list< object>中获取list< long>中包含的id的所有对象

kmpatx3s  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(814)

关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。

三年前关门了。
改进这个问题
我怎样才能得到 List<Object> filteredList 谁的身份证( Object.id )包含在给定的 List<id> idsList 从另一个 List<Object>allObjects . 考虑到适度的数据量,从时间上来说,解决这个问题的有效方法是什么。
我用的是java6

5t7ly7z5

5t7ly7z51#

我不想重复这两个列表太多次
为什么?过早的优化是件坏事。首先测试它,衡量它是否足够有效,如果存在问题就解决问题。
您可以使用一个简单的过滤器通过流来实现这一点:

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());

使用streams的好处是,您可以稍后将其并行化。
另一个优化是检查数据结构的使用情况。正如seelenvirtuose指出的,使用 HashSet 将降低 contains 从o(n)到o(1):

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

如果做不到这一点,您还可以通过复制 List 变成一个 HashSet 过滤前:

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

但是如果您可以控制数据结构,只需使用 HashSet 从一开始。

相关问题