java - 根据 ID 过滤对象的简短方法

标签 java

我想根据 ID 过滤公司。这就是我的代码的样子:

List<Company> vendors = new ArrayList<Company>();
    descriptions.stream().forEach(desc -> {
        long vendorID = desc.getCompany().getId().getLongValue();
        if (vendors.stream().filter(vendor -> vendor.getId().getLongValue() == vendorID).count() == 0) {
            vendors.add(desc.getCompany());
        }
    });
return vendors;

我的代码可以工作,但我想知道是否有更短的方法。

最佳答案

看起来您正在创建一个从具有唯一标识符的 descriptions Collection 中获取的 Company 实例列表。

现在,假设 Company 的标识符是唯一的,并且具有相同标识符的两个 Company 实例彼此等于 (即您的 Company 类以通过比较标识符来测试相等性的方式覆盖 equals),您可以简单地收集不同的 Company 实例:

List<Company> vendors =
    descriptions.stream()
                .map(Description::getCompany)
                .distinct()
                .collect (Collectors.toList());

关于java - 根据 ID 过滤对象的简短方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33866767/

相关文章:

java - jshell - 无法找到 printf

java - 在 apache log4j 中编码模式布局

带有复选框的Java android NavigationView

java - 使用 Saxon 库时 CPU 使用率高

java - ElasticSearch Spring-Data 日期格式总是很长

java - 将图像转换为二维数组,然后用 Java 取回图像

java - 如何根据用户输入重新启动我的java程序?

java - 如何将多维 vector 从 C++ 转换为 Java?

java - 通过数组使用选择排序对数组列表进行排序

java - Shiro Authenticating Realm 应该是事务性的吗?