检查自定义对象列表是否具有相同的 Java 8 属性值

新手上路,请多包涵

我是 Java 8 的新手。我有一个 A 类型的自定义对象列表,其中 A 如下所示:

  class A {
      int id;
      String name;
 }

我想确定该列表中的所有对象是否都具有相同的名称。我可以通过遍历列表并捕获名称的先前和当前值来实现。在这种情况下,我找到 了 How to count number of custom objects in list which have same value for one of its attribute 。但是有没有更好的方法在 java 8 中使用流来做同样的事情?

原文由 Joy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 768
2 个回答

一种方法是获取第一个列表的名称并调用 allMatch 并对其进行检查。

 String firstName = yourListOfAs.get(0).name;
boolean allSameName = yourListOfAs.stream().allMatch(x -> x.name.equals(firstName));

原文由 Sweeper 发布,翻译遵循 CC BY-SA 3.0 许可协议

You can map from A –> String , apply the distinct intermediate operation, limit(2) to enable在可能的情况下进行优化,然后检查 count 是否小于或等于 1 在这种情况下,所有对象都具有相同的名称,如果不是,则它们不都具有相同的名称。

 boolean result = myList.stream()
                       .map(A::getName)
                       .distinct()
                       .limit(2)
                       .count() <= 1;

对于上面显示的示例,我们利用 limit(2) 操作,以便我们在找到两个不同的对象名称时立即停止。

原文由 Ousmane D. 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题