将List <Map <Long,String >>转换为List <Long> Java 8

dor*_*ado 0 java collect java-8 java-stream

我有一个地图列表,其中每个地图只有one key-value pair一个。我需要将其转换为仅键列表。我正在尝试使用流,如下所示:

List<Map<Long, String>> lst = // some data
List<Long> successList = lst.stream().map(ele -> ele.keySet().toArray()[0]).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但是我最终收到以下错误:

java: incompatible types: inference variable T has incompatible bounds
  equality constraints: java.lang.Long
  lower bounds: java.lang.Object
Run Code Online (Sandbox Code Playgroud)

如何解决此问题,或者有什么更好的方法?

Ami*_*era 6

用法Steram#flatMap如下:

lst.stream()
   .flatMap(e->e.entrySet().stream())
   .map(e->e.getKey())
   .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

编辑:( 根据评论)更优雅的方法是Map#keySet代替 Map#entrySet

lst.stream()
   .flatMap(e -> e.keySet().stream())
   .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • 为什么不简单地`flatMap(e-&gt; e.keySet()。stream())`? (2认同)

YCF*_*F_L 5

You need Just :

List<Long> successList = lst.stream()
        .flatMap(e -> e.keySet().stream())
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)