gpt4 book ai didi

java - 如何在java流过滤器中使用java流映射

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:19:16 24 4
gpt4 key购买 nike

我有 2 个数组,我想制作一个 role.getRoleName() 列表,其中仅包含两个数组中使用流的元素。

final List<String> roleNames = new ArrayList<>();
roleNames = Arrays.stream(roles).filter(role -> role.getRoleId()
== Arrays.stream(permissions).map(permission -> permission.getRoleId()));

当我写上面的代码时,我得到了

Operator '==' cannot be applied to 'int', 'java.util.stream.Stream'

我理解错误,但我不知道如何使权限流仅在 permission.getRoleId 整数中的解决方案。

最佳答案

无法比较intStream 等不兼容的类型。

从您展示的内容来看,Stream#anyMatch可能是个不错的候选人。

roleNames = Arrays.stream(roles)
.map(Role::getRoleId)
.filter(id -> Arrays.stream(permissions).map(Role::getRoleId).anyMatch(p -> p.equals(id)))
.collect(Collectors.toList());

这部分 Arrays.stream(permissions).map(Role::getRoleId) 可以预先计算并存储到 Set 中。

final Set<Integer> set = Arrays.stream(permissions)
.map(Role::getRoleId)
.collect(Collectors.toSet());

roleNames = Arrays.stream(roles)
.filter(role -> set.contains(role.getRoleId()))
.map(Role::getRoleName)
.collect(Collectors.toList());

关于java - 如何在java流过滤器中使用java流映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57850447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com