过滤时如何从地图中恢复列表(使用流)

时间:2015-02-01 14:02:41

标签: java hashmap java-8 java-stream collectors

我需要过滤HashMap

Map<String, Point> points = new HashMap<String, Point>();

对于它的一些值并有一个方法

public List<String> getEqualPointList(Point point) {
    return this.points.entrySet().stream().filter(p -> p.getValue().isEqual(point)).collect(Collectors.toList(p -> p.getKey()));
}

该方法应在过滤Map后返回包含所有键(匹配值)的List。

如何处理collect()?我收到一条错误消息

Multiple markers at this line
- The method toList() in the type Collectors is not applicable for the arguments 
  ((<no type> p) -> {})
- Type mismatch: cannot convert from Collection<Map.Entry<String,Point>> to
  List<String>

1 个答案:

答案 0 :(得分:3)

toList不接受任何参数。您可以使用mapEntry的流转换为密钥流。

public List<String> getEqualPointList(Point point) {
    return this.points
               .entrySet()
               .stream()
               .filter(p -> p.getValue().isEqual(point))
               .map(e -> e.getKey())
               .collect(Collectors.toList());
}