java - 使用 Streams 通过特定属性获取两个列表之间的共同元素和差异

标签 java list java-stream

我有两个对象列表 dbAssetsassetVOS .

我想要使用流通过某些属性(在我的例子中是 getSecName())获得共同元素(以及差异)。

我尝试过以下方法:

dbAssets.stream().map(SomeClass::getSecName)
    .filter(dbAssetName -> assetVOS.stream()
            .map(SomeClass::getSecName)
            .anyMatch(assetVOSName -> dbAssetName.equals(assetVOSName)))
    .collect(Collectors.toList());

但我收到以下错误:

Incompatible types. Required List<SomeClass> but 'collect' was inferred to R: no instance(s) of type variable(s) exist so that String conforms to SomeClass inference variable T has incompatible bounds: equality constraints: SomeClass lower bounds String

最佳答案

由于您正在映射您的SomeClass实例进入String s,您的流管道会生成 List<String> ,不是List<SomeClass> .

获得List<SomeClass> ,尝试这样的事情:

List<SomeClass> output = 
    dbAssets.stream()
            .filter(obj -> assetVOS.stream()
                                   .map(SomeClass::getSecName)
                                   .anyMatch(assetVOSName -> obj.getSecName ().equals(assetVOSName)))
            .collect(Collectors.toList());

关于java - 使用 Streams 通过特定属性获取两个列表之间的共同元素和差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72948870/

相关文章:

java - 计算两个地理位置之间的距离

java - 如何使用 ImageIO 保存通过 Graphics 创建的 Java 图像

java - hibernate : Stale state exception

java - 需要在反射(reflection)时弄脏我的手

c - 在C中查找重复项

python - 在列表中找到 int 后删除索引 - Python

C# 使用对象列表填充组合框并保持对象属性可访问

java - 其他流的笛卡尔积流,每个元素作为一个列表?

java - 如何在Java中使用CompletableFuture处理列表列表?

Java : use Streams to convert List<Object> to another List<anotherObject>