網頁

2019/12/10

Java 8 lambda 合併多個回傳List
merge multi List with lambda

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);
    }

}

參考:

沒有留言:

張貼留言