Java 泛型不兼容类型(不存在类型变量的实例)

Sum*_*mit 4 java generics lambda java-8

问题标题可能看起来与其他帖子相同,但内容不同。所以请不要将其标记为重复。

问题

我有以下课程:

public class SCDTO extends RDTO {
    private List<String> sCPairs = Collections.emptyList();

    public SCDTO(List<String> sCPairs) {
        this.sCPairs = sCPairs;
    }

    //Getter setter
    
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用下面的 lambda 表达式来设置sCPairs.

sCPairsObject.setSCPairs(
         util.getSCMap().entrySet().stream()
        .filter(entry -> entry.getValue().contains("abc"))
        .collect(Collectors.toCollection(ArrayList<String>::new))
);
Run Code Online (Sandbox Code Playgroud)

但我有一个编译错误:

no instance(s) of type variable(s) exist so that Entry<String, List<String>> conforms to String
Run Code Online (Sandbox Code Playgroud)

util.getSCMap返回Map<String, List<String>>

谁能解释一下为什么会发生这种情况以及如何解决它?

谢谢。

Adr*_*ter 5

您正在从地图流式传输条目:

sCPairsObject.setSCPairs(util.getSCMap().entrySet().stream()
Run Code Online (Sandbox Code Playgroud)

然后过滤掉其中一些:

.filter(entry -> entry.getValue().contains("abc"))
Run Code Online (Sandbox Code Playgroud)

现在您需要将条目映射到列表,例如:

.map(entry -> entry.getValue())
Run Code Online (Sandbox Code Playgroud)

并将所有这些列表的内容作为一个流进行流式传输:

.flatMap(List::stream)
Run Code Online (Sandbox Code Playgroud)

最后将值收集到列表中:

.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)