亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 List<Map<Long, String>> 轉換為 List<Long> Java 8

將 List<Map<Long, String>> 轉換為 List<Long> Java 8

拉莫斯之舞 2022-07-27 20:19:08
我有一個地圖列表,其中每個地圖只有one key-value pair一個。我需要將其轉換為鍵列表。我正在嘗試按如下方式使用流:List<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 回答

?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

使用Stream#flatMap如下:

lst.stream()
   .flatMap(e->e.entrySet().stream())
   .map(e->e.getKey())
   .collect(Collectors.toList());

編輯:( 根據評論)更優雅的方式將是使用 ofMap#keySet而不是 Map#entrySet.

lst.stream()
   .flatMap(e -> e.keySet().stream())
   .collect(Collectors.toList());


查看完整回答
反對 回復 2022-07-27
?
米脂

TA貢獻1836條經驗 獲得超3個贊

你只需要:

List<Long> successList = lst.stream()
        .flatMap(e -> e.keySet().stream())
        .collect(Collectors.toList());


查看完整回答
反對 回復 2022-07-27
?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

雖然已經發布了更好的答案(flatMap是你的朋友在這里),但我認為在這里值得指出的是,打字錯誤源于使用toArray無參數。


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 }

看那邊?當你toArray不帶參數使用時,你會得到 type 的結果Object[]。所以改為這樣做:


jshell> a.toArray(new Long[1])

$3 ==> Long[4] { 1, 2, 3, 4 }

通過添加參數new Long[1],我們強制結果為toArray您想要的 Long 數組,而不是對象數組。


參見JavaDoc 中的“toArray”


查看完整回答
反對 回復 2022-07-27
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

用這個:

lst.stream().flatMap(m -> m.entrySet().stream()).map(Map.Entry::getKey).collect(toList());


查看完整回答
反對 回復 2022-07-27
  • 4 回答
  • 0 關注
  • 472 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號