当前位置: 首页 > 知识库问答 >
问题:

如何在与java中映射键匹配的列表中添加元素[重复]

卫高明
2023-03-14

我有一张这样的清单

[A-Apple.txt,B-Ball.txt,A-Axe.txt,B-Box.txt]

在此基础上,我想创建一个如下所示的地图:

{A=[A-Apple.txt,A-Axe.txt], B= [B-Ball.txt, B-Box.txt]

我试过了

   Map<String,List<String>> inputMap = new HashMap<>();
    inputFCSequenceFileList.forEach(value ->{
        List newList = new ArrayList();
                newList.add(value);
                inputMap.put(value.split("-")[0], newList);
            }
            );

但是没有得到期望值。我只得到最后一个元素。如果我将列表创建移到foreach循环之外,那么我将获得所有值。

共有2个答案

缪晋
2023-03-14

您需要检查该列表是否已存在于地图中。仅在缺少条目时创建它。

inputList = inputMap.getOrDefault(key, new ArrayList<String>());
inputList.add(value);
inputMap.put(key, inputList);

这应该作为循环体来完成。没有测试它,但应该给你的想法。

姜聪
2023-03-14

列表流中的groupingBy应该会给出您期望的结果:

Map<String, List<String>> collect = list.stream()
            .collect(Collectors.groupingBy(s -> s.split("-")[0]));
 类似资料:
  • 输入: 输出: 输入: 线程“main”java.lang.IllegalStateException中的异常:重复键-1.0 我怎么才能修好这个?

  • 我有一个熊猫数据框,其中一列由列表组成: 我想添加,例如,每个列表的第一个和最后一个索引。为此,我使用: 这分别作用于每一行,如果数据帧很大,这可能会非常密集。有没有办法将此操作矢量化?

  • 问题内容: 这是一个非常简单的程序: 这是我期望的输出: 但是我得到了这个: 真的有我不来的东西! 问题答案: 你必须做 不 现在可以正常工作: 当您执行类似操作时,您会在一个列表中三次获得相同的列表。 相同的 意思是,当您更改其中之一时,您也会更改所有它们(因为只有一个列表被引用了3次)。 您需要创建三个独立的列表来解决此问题。您可以通过列表理解来做到这一点。您在此处构造一个由独立的空列表组成的

  • 我有一个数字列表L。还有另一个数字列表M。我需要返回一个在L和M中找到的数字列表L。 编辑:从数学上讲,我正在寻找多集交点。 例子: L=3,,4,,5,,,6 M=,7,,,,1 L'=9,1,2,1 我为此编写了以下代码: 虽然它达到了目的,但我想知道是否有一种惯用的Perl6方法可以做到这一点? 一些背景:我一直在尝试一起学习Perl6和Python,并用这两种语言解决相同的难题。Pytho

  • 有没有一种简单/快速的方法来检查地图中的元素是否使用流不同?我有这张地图: