【问题标题】:java comparing properties of list elements , like list.contains(..) but by propertiesjava比较列表元素的属性,如list.contains(..),但按属性
【发布时间】:2018-03-16 11:49:15
【问题描述】:

我有两个列表

class FirstElement {
       private int id;
       private String name;
}

class SecondElement {
       private int id;
       private String someString;
}

List<FirstElement> listF = getListOfSomeElements1();
List<SecondElement> listS = getListOfSomeElements2();

如果 properties name=someString,我需要在 listF&lt;FirstElement&gt; 中查找元素

如果我需要通过对应的元素查找,我使用例如:

if(listF.contains(listS.get(1))){...}

我用自己的方法

boolean compareProperties(List<FirstElement> firstList, SecondElement secondElement){
 for(FirstElement firstElement:firstList){
        if (firstElement.getName().equals(secondElement.getSomestring)){
            return true;
        }
    }
    return false;
} 

如何使用 Stream 删除我的方法?

【问题讨论】:

标签: java arraylist java-stream


【解决方案1】:

如果您想将当前方法转换为流版本,则可以使用anyMatch

boolean exists = 
           listF.stream()
                .anyMatch(e -> e.getName().equals(secondElement.getSomestring));

如果您想找到满足所提供条件的第一个元素,那么您可以这样做:

Optional<FirstElement> firstElement = 
         listF.stream()
              .filter(e -> e.getName().equals(secondElement.getSomestring))
              .findFirst();

解开Optional&lt;T&gt; 的方法有很多种,可以在here 找到。

【讨论】:

    【解决方案2】:

    您可以按需要的字段过滤流

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-07
      • 2020-04-10
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多