gpt4 book ai didi

Java 11 : convert List to TreeMap> 使用收集器

转载 作者:行者123 更新时间:2023-12-03 18:36:10 27 4
gpt4 key购买 nike

我有一个这样的 list

List<String> customList = Arrays.asList(
"5000 Buruli ulcer is an infectious disease",
"6000 characterized by the development",
"7000 of painless open wounds.",
"8000 The disease largely occurs in",
"10000 sub-Saharan Africa and Australia."
);
我想将该 List 转换为这样的 TreeMap<String, List<String>>:
"5000", ["Buruli", "ulcer", "is", "an", "infectious", "disease"]
"6000", ["characterized", "by", "the", "development"]
// etc
到目前为止我的代码:
TreeMap<String, List<String[]>> collect = customList.stream()
.map(s -> s.split(" ", 2))
.collect(Collectors
.groupingBy(a -> a[0], TreeMap::new, Collectors.mapping(a -> a[1].split(" "), Collectors.toList())));
我有两个问题。
  • 首先是 TreeMap::new 可能不起作用,因为顺序与原始的 List 不同。
  • 其次是我似乎没有找到将 List<String[]> 变成 List<String> 的方法。

  • 有任何想法吗?

    最佳答案

    您想使用 LinkedHashMap 来保留原始顺序。所以你的代码应该是这样的:

    Map<String, List<String>> collect = customList.stream()
    .map(s -> s.split(" +"))
    .collect(Collectors.toMap(a -> a[0], a -> Arrays.asList(a)
    .subList(1, a.length), (a, b) -> a, LinkedHashMap::new));
    如果您的键不是唯一的,您可以使用分组收集器与这样的东西( Collectors.flatMapping 需要 Java 9+):
    collect = customList.stream()
    .map(s -> Arrays.asList(s.split(" +")))
    .collect(Collectors.groupingBy(l -> l.get(0),
    LinkedHashMap::new,
    Collectors.flatMapping(l -> l.stream().skip(1), Collectors.toList())));

    关于Java 11 : convert List<String> to TreeMap<String, List<String>> 使用收集器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66852111/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com