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

如何使用streams Java 8按键分组列表并拆分值

汤玉宸
2023-03-14

我需要对ABC列表进行分组,同时我还想拆分值。输入:

List<ABC> list = new ArrayList<>();

ABC A1 = new ABC();
A1.setName("OO");
A1.setVal("OO111,OO222,OO333"); // split this while grouping
list.add(A1);

ABC A2 = new ABC();
A2.setName("OO");
A2.setVal("OO1");
list.add(A2);

ABC A3 = new ABC();
A3.setName("YY");
A3.setVal("1333,11444");
list.add(A3);

Output:

```java
Map<String, List<String>> postsPerType;
//Group by Name: ex: OO & YY. Split the Value by "," and add it to list
     Key: 00 Values: List: "OO111","OO222","OO333","OO1"
     Key: YY Values: List: "1333","11444"

请建议,谢谢。

共有1个答案

曹经业
2023-03-14

如果您使用Java9+,可以使用collectors.flatmapping()作为的下游分组:

list.stream().collect(Collectors.groupingBy(ABC::getName,
                    Collectors.flatMapping(a -> Arrays.stream(a.getVal().split(",")), 
                                           Collectors.toList())));

这应该会产生你想要的结果。

 类似资料:
  • 如何拆分列表并并行执行 我的场景-- 我从webservices获得了1000辆使用下面列表的车辆。 我想在每个列表中分割100辆车并并行执行所有列表。 谢谢

  • 问题内容: 假设我有一个这样的列表: 我如何最优雅地将其分组以在Python中获得此列表输出: 因此,这些值按次值分组,但顺序保留下来。 问题答案:

  • 问题内容: 我需要分解一个始终如下所示的字符串: 东西-something_else。 我需要在另一个输入字段中输入“ something_else”。当前,此字符串示例正被即时添加到HTML表行中,如下所示: 我认为“拆分”是可行的方法,但是几乎找不到文档。 问题答案: 可以在MDN找到文档。请注意,是不是 一个jQuery方法,但本地字符串的方法。 如果在字符串上使用,则返回带有子字符串的数组

  • 这是作为输入的字符串,但我只需要每一列,从第二列开始,即: 1(第二行) 2和1(第三行) 1(第五排) 这个在可能有多少行或多少列(列被一个空格分割)方面没有固定的大小。 我认为通过使用以下工具,这相当容易: 我需要第一列之后的每一列。我仍在学习regex,但似乎找不到一个好的解决方案。我知道关于拆分的“\\r?\\n”和“”,但不知道如何将两者连接起来以获取每一列。非常感谢您的帮助:) 另一个

  • 我有UCI数据仓库中的胸部手术数据集 此数据集中的一行如下所示: 我有一个脚本可以将这些行读入子列表: 每个子列表都是文件中的一行,包含一些数据转换(大多数情况下,只是将行中的每个元素转换为一些数值;这部分与问题无关) 因此,每个子列表如下所示: 现在,我想做的是将这个子列表转换为两个子列表,其中: 第一个列表的th子列表包含所有元素,但原始列表的th子列表的最后一个元素除外 第二个列表的第一个子

  • 我有一张清单 我正在尝试从每个项目中删除“\n”。结果应该是这样的。 我尝试过各种方法,包括“re.split(r'\n')”和“replace()”,但都没有成功。