问题标题似乎与其他帖子相同,但内容不同。因此,请不要将其标记为重复。
问题:
我有以下课程:
public class SCDTO extends RDTO {
private List<String> sCPairs = Collections.emptyList();
public SCDTO(List<String> sCPairs) {
this.sCPairs = sCPairs;
}
//Getter setter
}
我正在尝试使用以下lambda表达式来设置sCPairs
。
sCPairsObject.setSCPairs(util.getSCMap().entrySet().stream().
filter(entry -> entry.getValue().contains("abc")).collect(Collectors.toCollection(ArrayList<String>::new)));
但是我遇到一个编译错误:
no instance(s) of type variable(s) exist so that Entry<String, List<String>> conforms to String
util.getSCMap
返回Map<String, List<String>>
。
任何人都可以解释为什么会发生这种情况以及如何解决吗?
谢谢。
答案 0 :(得分:4)
您的流管道会找到其值Map
包含List<String>
“ abc”的所有String
条目,并尝试将它们收集到List<String>
中。
您没有指定打算如何将每个将过滤器传递给Map.Entry<String,List<String>>
的{{1}}元素进行转换。根据所需的逻辑,也许您错过了过滤器后面的String
步骤。
例如,如果您希望收集所有具有将过滤器传递到map()
的值的键:
List<String>
答案 1 :(得分:1)
您正在从地图中流式传输条目:
sCPairsObject.setSCPairs(util.getSCMap().entrySet().stream()
然后过滤掉其中一些:
.filter(entry -> entry.getValue().contains("abc"))
现在您需要将条目映射到列表,例如:
.map(entry -> entry.getValue())
并将所有这些列表的内容作为一个流传输:
.flatMap(List::stream)
最后将值收集到列表中:
.collect(Collectors.toList());
答案 2 :(得分:0)
您根本不需要使用密钥,因此不需要遍历tags
.GroupBy(t => t.FirstId)
.ToDictionary(k => k.Key, g => g.OrderBy(t => t.Sequence).Select(t => t.SecondId));
。您可以获取entrySet
的值并对其进行过滤。看起来像这样
Map
答案 3 :(得分:0)
由于您要将src/main/resources
转换为spring.jackson.deserialization.fail-on-unknown-properties=true
,其中列表应该是所有匹配值列表的并集,因此需要Map<String, List<String>>
才能将这些值加入流列出到单个流中。
此外,您似乎不需要键,因此只需流式传输地图的值即可:
List<String>