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

Joy*_*Joy 9 java arraylist java-8 java-stream

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

 class A {
      int id;
      String name;
 }
Run Code Online (Sandbox Code Playgroud)

我想确定该列表中的所有对象是否具有相同的名称.我可以通过迭代列表并捕获名称的先前和当前值来实现.在那个上下文中,我找到了如何计算列表中自定义对象的数量,这些对象的一个​​属性具有相同的值.但是有没有更好的方法在使用流的java 8中做同样的事情?

Ous*_* D. 19

您可以mapA- > String,应用distinct中间操作,利用limit(2)在可能的情况下启用优化,然后检查是否count小于或等于1在这种情况下所有对象具有相同的名称,如果不是,则它们不具有相同的名称.

boolean result = myList.stream()
                       .map(A::getName)
                       .distinct()
                       .limit(2)
                       .count() <= 1;
Run Code Online (Sandbox Code Playgroud)

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

  • 这是正确的方法,应该被标记为已接受的答案. (3认同)

Swe*_*per 10

一种方法是获取第一个列表的名称并调用allMatch并检查.

String firstName = yourListOfAs.get(0).name;
boolean allSameName = yourListOfAs.stream().allMatch(x -> x.name.equals(firstName));
Run Code Online (Sandbox Code Playgroud)

  • 使用流,IMO的最有效+清晰的解决方案.一旦找到不匹配的元素,`allMatch`就会短路. (3认同)

Ale*_*981 7

另一种方法是使用计算不同名称的计数

boolean result = myList.stream().map(A::getName).distinct().count() == 1;
Run Code Online (Sandbox Code Playgroud)

当然你需要为'name'字段添加getter