将映射键过滤到一个集合中
Filter Map keys into a set
我有一张地图 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) -> {})] 中出现编译错误。
这里需要做什么。
过滤后,你有一个Stream<Map.Entry<String, EnrollmentData>>
。使用 toSet()
(不接受任何参数)进行收集会收集 Entry<String, EnrollmentData>
s,但您希望在收集之前将每个元素映射到它们的键。
您必须首先将结果流的元素映射到 Entry
的键:
.filter(yourFilterFunction)
.map(Map.Entry::getKey)
.collect(Collectors.toSet());
我有一张地图 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) -> {})] 中出现编译错误。
这里需要做什么。
过滤后,你有一个Stream<Map.Entry<String, EnrollmentData>>
。使用 toSet()
(不接受任何参数)进行收集会收集 Entry<String, EnrollmentData>
s,但您希望在收集之前将每个元素映射到它们的键。
您必须首先将结果流的元素映射到 Entry
的键:
.filter(yourFilterFunction)
.map(Map.Entry::getKey)
.collect(Collectors.toSet());