将 Map 键过滤为一组

我有一张地图 Map<String,EnrollmentData>,可以将学生 ID 映射到他的数据。
学生 id 需要根据某些 EnrollmentData 属性进行过滤,并作为 Set 返回。

Map<String,EnrollmentData> studentData = .........;
if(MapUtils.isnotEmpty(studentData )){
        Set<String> idSet = studentData .entryset().stream()
                     .filter(x -> x.getvalue().equals(...) )
                     .collect(Collectors.toSet( x -> x.getKey()));
}

但是,这给了我在 toSet [收集器不适用于参数 (( x) -> {}) ] 中的编译错误。
这里需要做什么。

morenming 回答:将 Map 键过滤为一组

过滤后,您有一个 Stream<Map.Entry<String,EnrollmentData>>。使用 toSet()(不接受任何参数)收集将收集 Entry<String,EnrollmentData>,但您希望在收集之前将每个元素映射到它们的键。

您必须首先将结果流的元素映射到 Entry 的键:

.filter(yourFilterFunction)
.map(Map.Entry::getKey)
.collect(Collectors.toSet());
本文链接:https://www.f2er.com/9965.html

大家都在问