Java 8 lambda 合併多個回傳結果List物件為一個List。
當一些方法的回傳結果為List
物件時,把每個回傳的List
合併為一的lambda寫法如下。
例如下面的getNameListByGroupId(int id)
方法會依傳入的id回傳List<String>
物件。
若用一個裝有多個id的List<Integer>
並以lambda Stream遍歷方式呼叫getNameListByGroupId()
並傳入每個id則會回傳多個List<String>
結果,此時可以用flatMap()
合併多個List<String>
轉成的Stream
物件為一個Stream
。最後再用collect()
蒐集成一個List<String>
。
public class Main {
private static Map<Integer, List<String>> map = new HashMap<>();
static {
map.put(1, Arrays.asList("Anthony", "Wolfgang", "Guy"));
map.put(2, Arrays.asList("Gorden", "Jamie", "Paula"));
}
public static void main(String[] args) {
List<Integer> groupIds = Arrays.asList(1, 2);
List<String> nameList = groupIds.stream() // Stream聚合操作
.flatMap(e -> getNameListByGroupId(e).stream()) // 使用flapMap()合併多個Stream為一個Stream
.collect(Collectors.toList());
System.out.println(nameList); // [Anthony, Wolfgang, Guy, Gorden, Jamie, Paula]
}
private static List<String> getNameListByGroupId(int id) {
return map.get(id);
}
}
參考:
沒有留言:
張貼留言