繁体   English   中英

如何将字符串列表转换为LinkedHashMap?

[英]How to convert a list of Strings to a LinkedHashMap?

我有一个清单:

private List <String> list;

我想将其转换为LinkedHashMap(以保留顺序),以便地图中的前两个值是LinkedHashMap条目,依此类推,直到列表为LinkedHashMap:

private LinkedHashMap<String, String> linked;

这就是我想出的。 诚然,我是Collectors实现的新手,请耐心等待:

            linked = list.stream()
                .collect(Collectors.toMap(
                        Function.identity(),
                        String::valueOf, //Used to be String::length
                        LinkedHashMap::new));

这在LinkedHashMap构造函数行上给了我一个错误:

Cannot resolve constructor of LinkedHashMap

这是列表可能的示例:

zero
test0
one
test1
two
test2

以及地图的外观:

zero:test0
one:test1
two:test2

谢谢

为什么使您的代码复杂化,一个简单的循环解决了这个问题:

for (int i = 0; i < list.size(); i += 2) {
    linked.put(list.get(i), list.get(i + 1));
}

快速,Ideone演示

产出

zero:test0
one:test1
two:test2

您错过了合并功能

合并函数,用于解决与相同键关联的值之间的冲突,如提供给Map.merge(Object,Object,BiFunction)

但是要使用流api用期望值填充地图,可以使用forEach方法和IntStream::iterate

LinkedHashMap<String, String> linked = new LinkedHashMap<>();

IntStream.iterate(0, n -> n < list.size(), n -> n + 2)
        .forEach(i -> linked.put(list.get(i), list.get(i + 1)));

这是我对Java 8的尝试。

   IntStream.range(0, list.size())
            .mapToObj(index -> {
                    if (index % 2 == 0) {
                        return new AbstractMap.SimpleImmutableEntry<>(list.get(index), list.get(index + 1));
                    }
                    return null;
                }
            )
            .filter(Objects::nonNull)
            .collect(Collectors.toMap(AbstractMap.SimpleImmutableEntry::getKey, AbstractMap.SimpleImmutableEntry::getValue));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM