我有一個地圖列表。List<Map<Integer,String>> lines. 我希望遍歷列表和所有映射,只查看特定的鍵值對,試圖找到匹配的字符串值 - “hi”。示例:我只對查看特定鍵范圍 5-10 的條目集并檢查匹配值感興趣。下面是我計劃的。迭代列表的方法檢查每個地圖是否有任何匹配項。有沒有更好或更清潔/更有效的方法呢?//basic logicfor(Map<Integer,String> map : lines){ return map.entrySet().stream() .filter(e -> 11 > e.getKey().intValue() && e.getKey().intValue() >= 5) .anyMatch(entry -> entry.getValue().equalsIgnoreCase("hi"));}
2 回答

ABOUTYOU
TA貢獻1812條經驗 獲得超5個贊
由于您已經在使用流,您還可以流式傳輸列表:
return lines.stream() .flatMap(map -> map.entrySet().stream()) .filter(entry -> 11 > entry.getKey() && entry.getKey() >= 5) .anyMatch(entry -> entry.getValue().equalsIgnoreCase("hi"));
這將返回true
如果有地圖在列表中包含了5和10(含)之間的一個關鍵條目和“喜”(不區分大小寫)的值,并且將返回false
,否則。這是我對您最初意圖的最佳猜測;如果我不正確,請告訴我。

慕娘9325324
TA貢獻1783條經驗 獲得超4個贊
如果地圖相當大,我會使用user2478398的評論。如果可能,請使用SortedMap
或NavigableMap
并且您可以輕松申請NavigableMap#subMap
。然后Stream
看起來像這樣:
lines.stream() .flatMap(m -> m.subMap(5, 11).values().stream()) .anyMatch("hi"::equalsIgnoreCase);
添加回答
舉報
0/150
提交
取消