将Map <A,B>转换为List <Pair <A,B>>-这是A,B是类的最有效的吗?

nek*_*kel 3 java java-8 java-stream

我有一个Map Pairs,想把它变成带有Pair对象的ArrayList。

我知道我可以做这样的事情

List<Pair<A,B>> nvpList = new ArrayList<Pair<A,B>>(2);
for(Map.Entry<String, String> entry : pairs.entrySet()){
  Pair n = new Pair(entry.getKey(), entry.getValue());
  nvpList.add(n);
}
Run Code Online (Sandbox Code Playgroud)

我们如何在Java8中使用流来做到这一点?

Nam*_*man 7

考虑到泛型,您可以执行以下操作:

<A, B> List<Pair<A, B>> convertMapToListOfPairs(Map<A, B> pairs) {
    return pairs.entrySet().stream()
            .map(entry -> Pair.of(entry.getKey(), entry.getValue()))
            .collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)

  • 如果特定的`Pair`实现具有接受`Map.Entry`输入的构造函数或工厂方法,那就更好了…… (2认同)