过滤自定义列表时流收集器错误

Stream collector error on filtering the custom list

List<RuleData> ruleDataList = conflictRuleIds.stream()
                .filter(conflictRuleId -> idsMap.containsKey(conflictRuleId))
                .collect(Collectors.toList());

这是给我的错误

no instance(s) of type variable(s) exist so that String conforms to RuleData inference variable T has incompatible bounds: equality constraints: RuleData lower bounds: String

价格,我想做的是过滤conflicRuleIds列表,然后检查是否在地图或not.and最后收集到列表

idsMap 包含 key->value as [string,RuleData]conflictingRuleIds 是一个字符串列表

对于地图中每个匹配的 ID,我必须为地图中的相应键添加值。类似于 .map() 函数

您需要使用 map() 将数据从 id 字符串转换为 RuleData,方法是从 idsMap.

获取
List<RuleData> ruleDataList = conflictRuleIds.stream()
                .filter(conflictRuleId -> idsMap.containsKey(conflictRuleId))
                .map(conflictRuleId -> idsMap.get(conflictRuleId))
                .collect(Collectors.toList());

也许这是个人喜好问题,但我会首先遍历映射条目和过滤器条目,列表中存在哪个键,而不是开始遍历列表元素:

List<RuleData> ruleDataList = idsMap.entrySet().stream()
                .filter(entry -> conflictRuleIds.contains(entry.getKey()))
                .map(Map.Entry::getValue)
                .collect(Collectors.toList());

如果没有其他反对意见,我会使用 Set 作为 conflictRuleIds 而不是 List