iT邦幫忙

0

JAVA如何使用lambda取得ArrayList<HashMap<key,val>>指定key的val

網路上找到的sample 似乎都是找HashMap<key,val>的code

但如果我的HashMap又是包在一個ArrayList中,要如何取得指定key的val物件呢?

如果採用傳統寫法,就會像是這樣:

for(HashMap<String,Object> data:list){
    if(data.containsKey("K1")){
        return data.get("K1"));
    }
}
weiclin iT邦高手 4 級 ‧ 2019-01-31 20:38:10 檢舉
外面再加一個 for ArrayList ?
gmlin iT邦新手 5 級 ‧ 2019-02-01 11:52:37 檢舉
嗯 用for 的確就可以解決,只是在想如果用lambda應該要怎麼寫
weiclin iT邦高手 4 級 ‧ 2019-02-01 13:44:16 檢舉
哦, 沒看清楚你要問的是 lambda

2 個回答

0
史帝夫
iT邦新手 5 級 ‧ 2019-02-01 10:10:18
list.stream()
    .flatMap(each -> each.entrySet().stream())
    .filter(each -> each.getKey().contains("K1"))
    .map(each -> each.getValue())
    .findFirst();
gmlin iT邦新手 5 級 ‧ 2019-02-01 11:51:07 檢舉
		list.stream()
	    .flatMap(each -> each.entrySet().stream())

eclipse 提示 compile error
Cannot infer type argument(s) for flatMap(Function<? super T,? extends Stream<? extends R>>)

史帝夫 iT邦新手 5 級 ‧ 2019-02-01 13:48:29 檢舉
  1. 檢查你的 JDK 是否為 8 以上
  2. 換個 IDE 或是直接用 cmd 試試

PS:若要用 eclipse 可以看看是否為這問題
https://bugs.eclipse.org/bugs/show_bug.cgi?id=508834

gmlin iT邦新手 5 級 ‧ 2019-02-01 15:31:23 檢舉

看來好像真是eclipse....

0
matthung
iT邦新手 5 級 ‧ 2019-12-15 12:25:11

Java 如何使用lambda取得ArrayList<HashMap<K, V>>指定key的val

ArrayList<HashMap<Integer, String>> mapList = new ArrayList<>();
//... 
List<String> values = mapList.stream() // 取出每個Map
        .map(e -> e.get(key)) // 找到符合key的val
        .collect(Collectors.toList()); // 把val蒐集起來

我要發表回答

立即登入回答