java - Java groupingBy 和转换字符串
问题描述
我收到一个字符串列表,我试图用 进行分区.groupingBy()
,这将给我一个Map<String, List<String>>
,并转换最终将出现在 Map 中的列表中的字符串。
我发现使用的示例Collectors.mapping
是我想使用的,但是所有示例都使用方法引用,例如.mapping(SomeClass::getSomething, ...
,由于我正在处理字符串,因此无法完成。
我以为我可以使用 lambda 作为映射函数,但似乎无法正确使用语法,最终出现“类型不匹配:无法转换...”错误。
这说明了我正在尝试做 的事情——</p>
import java.util.*;
import java.util.stream.Collectors;
class Main
{
public static void main(String[] args)
{
List<String> inputs = Arrays.asList("D8", "S1", "S5", "D2", "D15", "S9");
System.out.println(inputs);
Map<String, List<String>>
outputs = inputs.stream()
.collect(
Collectors.groupingBy(s -> s.startsWith("D") ? "desperate" : "serious")
//,Collectors.mapping(n -> Integer.valueOf(n.replaceAll("[DS]", "")), Collectors.toList())
)
;
System.out.println(outputs);
}
}
这将创建地图,按照我的预期对输入数据进行分组,并生成输出
{desperate=[D8, D2, D15], serious=[S1, S5, S9]}
但是我想要的,正如您可能从注释掉的行
Collectors.mapping(n -> Integer.valueOf(n.replaceAll("[DS]", "")), Collectors.toList())
中猜到的那样,它Map<String, List<Integer>>
包含通过删除前缀从字符串中提取的值。
我的真实用例可能会将一个字符串转换为另一个字符串,或者从更复杂的字符串中提取整数,但这说明了我正在尝试做的事情。
分组时如何使用 lambda 函数进行映射?
我也不清楚我读过的例子中第二个参数toList()
的使用。Collectors.mapping
我用这段代码创建了一个repl 。
解决方案
Collectors.groupingBy()
有一个版本需要另一个收集器的值,例如:
@Test
public void streamsTest() {
List<String> inputs = Arrays.asList("D8", "S1", "S5", "D2", "D15", "S9");
System.out.println(inputs);
Map<String, List<Integer>> outputs = inputs.stream()
.collect(
Collectors.groupingBy(
s -> s.startsWith("D") ? "desperate" : "serious",
Collectors.mapping(
s -> Integer.valueOf(s.substring(1)),
Collectors.toList())));
System.out.println(outputs);
}
这会产生:
[D8, S1, S5, D2, D15, S9]
{desperate=[8, 2, 15], serious=[1, 5, 9]}
推荐阅读
- javascript - Vue3 观察者 - 观察者何时按生命周期事件的顺序运行?
- microsoft-graph-api - 使用 Graph API 的带有多个附件的电子邮件 (>4 MB)
- c - 对数组进行排序,C 到 MIPS 程序集
- parallel-processing - Pytorch:将同一批数据发送到多个 GPU,并在每个 GPU 上单独执行操作
- hana - SAP HANA 计算视图,带有 SQL 脚本的计算列
- python - 如何在 Service Fabric 应用程序中运行 pythonnet (Keras.Net)?
- opengl - 如何从 Rust 中的其他线程绘制 OpenGL 三角形
- python - 如何在 Tensorflow / Keras 中为具有多个标签的字典形式的数据集定义损失?
- python - TypeError: unhashable type: 'numpy.ndarray' 将元组转换为集合
- spring - 使用外部 api 时 mime 类型无效