【问题标题】:Java Convert List<String> to Map<String, String>Java 将 List<String> 转换为 Map<String, String>
【发布时间】:2018-09-06 23:39:55
【问题描述】:

有没有一种很好的方法可以将字符串列表(使用 Collectos API?)转换/转换为 HashMap?

字符串列表和映射:

List<String> entries = new ArrayList<>();
HashMap<String, String> map = new HashMap<>();

...

我的 StringList 包含如下字符串:

    entries.add("id1");
    entries.add("name1, district");
    entries.add("id2");
    entries.add("name2, city");
    entries.add("id3");
    entries.add("name3");

输出应该是:

{id1=name1, district, id2=name2, city, id3=name3}

谢谢!

【问题讨论】:

  • 只需遍历列表(以 2 为步骤)并将所有内容放入地图中。只有两行代码。

标签: java list collections hashmap java-stream


【解决方案1】:

您不需要外部库,这很简单:

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

或者,使用非随机访问列表的更有效方法是:

for (Iterator<String> it = entries.iterator(); it.hasNext();) {
  map.put(it.next(), it.next());
}

或者,使用流:

IntStream.range(0, entries.size() / 2)
    .mapToObj(i -> new SimpleEntry<>(entries.get(2*i), entries.get(2*i+1))
    .collect(Collectors.toMap(Entry::getKey, Entry::getValue));

【讨论】:

  • 这肯定回答了 OP,但我说问题是从 XY 问题开始
  • 感谢您的及时回复!我也尝试了前两个选项。我想知道是否还有其他方法,例如您的第三种解决方案。
  • @Malsor 前两个选项优于第三个选项:它们清晰、高效且惯用。
【解决方案2】:

Andy 的回答绝对有效,而且它是一个不错的三线,但 this answer 可能会解释如何使用 Stream API 来做到这一点。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
  • 1970-01-01
  • 2016-07-21
  • 2021-12-21
  • 2020-06-10
  • 2015-11-21
  • 1970-01-01
相关资源
最近更新 更多