3

我有一个输入类型:List<List<String>>.

示例输入:

[A, A1Name]
[B, B1Name]

我想将其转换为 BiMap

A -> A1Name
B -> B1Name

实现这一目标的最佳方法是什么:

目前我正在做:

final BiMap<String, String> myMap = HashBiMap.create();
lines.forEach(
    (tokens) -> {
        myMap.put(tokens.get(0), tokens.get(1));
    }
);
4

1 回答 1

9

由于BiMapimplements Map,您可以使用toMap收集器。要复制循环的行为(重复键默默地覆盖值,重复值抛出异常),您可以执行以下操作:

BiMap<String,String> m = lines.stream().collect(toMap(
    x->x.get(0), x->x.get(1), (a,b)->b, HashBiMap::create
));

顺便说一句,当您不确定如何将代码转换为流时,3-argumentcollect提供了一种几乎逐字转换迭代代码的方法:

BiMap<String,String> m = lines.stream().collect(
        HashBiMap::create,
        (bm,t) -> bm.put(t.get(0), t.get(1)),
        BiMap::putAll
);
于 2015-08-12T02:16:04.303 回答