我有一个地图列表,其中每个地图只有每个地图。我需要将其转换为密钥列表。我正在尝试使用流,如下所示:one key-value pairList<Map<Long, String>> lst = // some dataList<Long> successList = lst.stream().map(ele -> ele.keySet().toArray()[0]).collect(Collectors.toList());但我最终得到以下错误:java: incompatible types: inference variable T has incompatible bounds equality constraints: java.lang.Long lower bounds: java.lang.Object如何解决此问题或有更好的方法?
4 回答
哈士奇WWW
TA贡献1799条经验 获得超6个赞
使用如下:Stream#flatMap
lst.stream() .flatMap(e->e.entrySet().stream()) .map(e->e.getKey()) .collect(Collectors.toList());
编辑:(根据评论)更优雅的方式将是使用而不是.Map#keySet
Map#entrySet
lst.stream() .flatMap(e -> e.keySet().stream()) .collect(Collectors.toList());
鸿蒙传说
TA贡献1865条经验 获得超7个赞
您只需要 :
List<Long> successList = lst.stream() .flatMap(e -> e.keySet().stream()) .collect(Collectors.toList());
青春有我
TA贡献1784条经验 获得超8个赞
虽然已经发布了更好的答案(是你的朋友在这里),但我认为值得在这里指出的是,打字错误源于没有参数的使用。flatMaptoArray
jshell> List<Long> a = Arrays.asList(1L, 2L, 3L, 4L)
a ==> [1, 2, 3, 4]
jshell> a.toArray()
$2 ==> Object[4] { 1, 2, 3, 4 }
看到了吗?不使用参数时,将得到类型 .因此,请改为执行以下操作:toArrayObject[]
jshell> a.toArray(new Long[1])
$3 ==> Long[4] { 1, 2, 3, 4 }
通过添加参数,我们强制的结果是您想要的 Long 数组,而不是对象数组。new Long[1]toArray
开满天机
TA贡献1786条经验 获得超13个赞
使用这个:
lst.stream().flatMap(m -> m.entrySet().stream()).map(Map.Entry::getKey).collect(toList());
添加回答
举报
0/150
提交
取消