将 List 转换为 Map

2024-04-26

我有以下团队列表及其得分:

List<String> teams = Arrays.asList("Dortmund 8", "Bayern 10", "Madrid 9", "Bayern 2");

我想将其转换为地图,如 Map,因此 String 是球队,得分是 Integer ("Dortmund", 8)。是否可以在没有流的情况下实现或者使用流更好?转换的例子将非常感激。


好的,这是我提到的三种可能性。执行以下操作:

  • 提供不同的方法来处理重复项。
  • 将值放入LinkedHashMap以保持遭遇顺序。
  • 非列表版本按分数对它们进行排序,但将相同的分数保持相同的顺序。如果您不希望对它们进行排序,可以轻松将其删除,或者可以按团队名称进行排序。
List<String> teams = Arrays.asList("Dortmund 8", "Bayern 10",
            "Dortmund 7", "Madrid 10", "Madrid 9");

该条目保留重复团队遇到的第一个条目。

Map<String, Integer> map1 =
        teams.stream().map(str -> str.split("\\s+"))
                .sorted(Comparator.comparing(
                     arr -> Integer.parseInt(arr[1])))
                .collect(Collectors.toMap(arr -> arr[0],
                        arr -> Integer.parseInt(arr[1]),
                        (a, b) -> a, // <-- the 'a' indicates the first one
                        LinkedHashMap::new));
System.out.println("Keep the first score encountered");
map1.entrySet().forEach(System.out::println);
System.out.println();

这保留了重复团队遇到的最后一个条目。

Map<String, Integer> map2 =
        teams.stream().map(str -> str.split("\\s+"))
                .sorted(Comparator.comparing(
                        arr -> Integer.parseInt(arr[1])))
                .collect(Collectors.toMap(arr -> arr[0],
                        arr -> Integer.parseInt(arr[1]),
                        (a, b) -> b,// <-- the 'b' indicates the last one
                        LinkedHashMap::new));

System.out.println("Keep the last score encountered");
map2.entrySet().forEach(System.out::println);
System.out.println();

这个将每个团队的得分存储在一个列表中。

Map<String, List<Integer>> map3 =
        teams.stream().map(str -> str.split("\\s+"))
                .collect(Collectors.groupingBy(arr -> arr[0],
                        LinkedHashMap::new,
                        Collectors.mapping(
                                a -> Integer.parseInt(a[1]),
                                Collectors.toList())));
System.out.println("Put the scores in a list");
map3.entrySet().forEach(System.out::println);

他们打印

Keep the first score encountered
Dortmund=7
Madrid=9
Bayern=10

Keep the last score encountered
Dortmund=8
Madrid=10
Bayern=10

Put the scores in a list
Dortmund=[8, 7]
Bayern=[10]
Madrid=[10, 9]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 List 转换为 Map 的相关文章

  • SAP JCo JAVA 无法初始化类 com.sap.conn.jco.JCo

    我想使用 SAP JCo 为我的 Java 程序选择用户数据 但我得到的只是 Sep 23 2014 1 34 28 PM org apache catalina core StandardWrapperValve invoke SEVER
  • 如何禁用 Spring 日志记录 DEBUG 消息?

    我正在开发一个简单的桌面应用程序 不是网络应用程序 这是我的log4j properties log4j rootCategory INFO stdout log4j appender stdout org apache log4j Con
  • Java 8 Streams - 按层次结构对嵌套列表进行排序

    给出以下示例 我想要一个对列表和嵌套列表进行排序的流函数 class Foo public int sort public List
  • 如何在 Java Swing 中创建右键单击上下文菜单?

    我目前正在通过实例化一个新的来创建右键单击上下文菜单JMenu右键单击并将其位置设置为鼠标的位置 有更好的方法吗 您可能正在手动调用setVisible true 在菜单上 这可能会导致菜单中出现一些令人讨厌的错误行为 The show C
  • JAVA GENERICS错误:具有相同的擦除,但两者都没有覆盖另一个[重复]

    这个问题在这里已经有答案了 为了好玩 我正在创建一个排序框架 以更好地理解各种排序算法 而且 我试图使其足够通用 以便它可以对实现扩展可比较接口的接口的任何内容进行排序 然而 java 编译器对我不满意 这是我的界面 public inte
  • java格式化表格输出

    所以我正在尝试格式化我的输出 System out println Menu nItem tItem t tPrice tQuantity for int i 0 i
  • java列表中的addAll方法

    我一直在研究java中的addAll方法 但这让我感到奇怪 到底有什么区别public void addAll List
  • 为什么在步骤中将 TransactionManager 设置为 JPATransactionManager 不正确?

    我正在使用 Spring Batch 和 JPA 并且经历了 TransactionManager bean 冲突 我通过在步骤中将 TransactionManager 设置为 JpaTransactionManager 找到了解决方案
  • 我怎样才能修复这段代码中的这个错误[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当我运行 jUnit 测试时 我在 testSetName 上遇到错误 这是为什么 因为测试是为了查看名称是否为 ferndown 以及它
  • Struts 2 动态变量

    我正在尝试使用 set 标签在 Struts2 中创建动态变量
  • 原生状态栏

    有没有办法创建nativeSWT 中的状态栏与 Windows 应用程序中的状态栏类似 我见过使用标签模拟的状态栏 但我对真正的解决方案更感兴趣 org eclipse jface action StatusLineManager crea
  • 为什么 getSession() 在短时间内间隔的后续请求中不返回相同的会话?

    我正在发送一个 getJSON HTTP GET 请求两次 使用不同的数据 一次又一次 假设我们有 request1 和 request2 我可以在 FF 和 Chrome 的开发者工具中看到我有相同的cookie JSESSIONID F
  • equals 和 hashcode 的不同字段

    我同意这篇文章的声明在Java中重写equals和hashCode时应该考虑哪些问题 https stackoverflow com questions 27581 overriding equals and hashcode in jav
  • 如何在另一个 Gui 中启动 JADE Gui?

    如何在另一个 Gui 中启动 JADE Gui 假设我的 Gui 上有一个按钮 点击该按钮后 JADE Gui 将启动 这可能吗 如果是 怎么办 提前致谢 Regards 我假设 JADE Gui 你指的是 JADERMA http jad
  • 过滤(搜索和替换)InputStream 中的字节数组

    我有一个 InputStream 它将 html 文件作为输入参数 我必须从输入流中获取字节 我有一个字符串 XYZ 我想将此字符串转换为字节格式 并检查从 InputStream 获得的字节序列中是否存在与该字符串匹配的字符串 如果有的话
  • 如何执行带有参数的命令?

    如何在 Java 中执行带有参数的命令 我试过了 Process p Runtime getRuntime exec new String php var www script php m 2 这是行不通的 String options n
  • 封闭实例的匿名类

    我正在阅读 Joshua Bloch 的 Effective Java 第二版 目前我在第 22 项 它描述了内部类和嵌套类 但我无法理解他这句话的意思 匿名类具有封闭实例当且仅当它们发生时 在非静态上下文中 有人能给我一个代码示例并解释它
  • Android 回调监听器 - 将 SDK 中的 pojo 的值发送到应用程序的 Activity

    我有一个深埋在 SDK 中的 java 类 它执行一个操作并返回一个布尔值 它不知道应用程序的主要活动 但我需要主要活动来接收该布尔值 我见过很多关于回调 广播和监听器的问题 但他们似乎都了解该活动 我的 pojo 确实有一个 Activi
  • lwjgl 3 , glUniformMatrix4 导致 jre 崩溃

    我正在使用 lwjgl 3 并学习现代 opengl 3 我想将统一矩阵发送到顶点着色器 以便我可以应用转换 我尝试过 但程序因此错误而崩溃 A fatal error has been detected by the Java Runti
  • Java无限信号量

    想知道如何not使用信号量限制连接 或任何东西 所以你可能会想 这听起来很愚蠢 但是 它稍微简化了我的代码 因为它让我可以统一处理有限和无限的情况 请注意 我并不是在寻找有关如何编写类似内容的建议 if limited semaphore

随机推荐