gpt4 book ai didi

java - 如何使用java流对由空行分隔的字符串行进行分组

转载 作者:行者123 更新时间:2023-12-01 14:16:44 26 4
gpt4 key购买 nike

我有以下输入,我希望使用空行作为逻辑分隔符对它们进行分组。输入数据类型: List<String>

line1
line2
line3

line4
line5
line6

line7
line8

预期输出:类型:列表<列表>

{{line1, line2, line3}, {line4, line5, line6}, {line7, line8}}

虽然使用命令式编程这很简单,但我正在寻找一种使用 Java 函数式编程的解决方案。

最佳答案

您没有说明您使用的是哪个 Java 版本,但这应该适用于 Java8+。 reducestream 上运行如果你使用带有 3 个参数的初始值,可以给你想要的东西,在这种情况下,一个包含字符串列表的列表,一个获取当前结果和单个字符串的 lambda 函数。当它看到一个空行时,这确实完成了添加新列表的所有工作。最后,一个组合器解释了如何组合 2 个列表,但实际上只是为了帮助编译器理解正在发生的事情。在这种情况下,它什么都不做,所以它总是可以返回一个空列表。

String input = "line1\n" +
"line2\n" +
"line3\n" +
"\n" +
"line4\n" +
"line5\n" +
"line6\n" +
"\n" +
"line7\n" +
"line8";
List<String> strings = Arrays.stream(input.split("\n")).collect(Collectors.toList());

List<List<String>> initial = new ArrayList<>();
initial.add(new ArrayList<>());
List<List<String>> result = strings.stream().reduce(initial, (subtotal, element) -> {
if (element.trim().isEmpty()) {
subtotal.add(new ArrayList<>());
} else {
subtotal.get(subtotal.size() - 1).add(element);
}
return subtotal;

}, (list1, list2) -> emptyList());

我得到 List<List<String>> 的输出result[[line1, line2, line3], [line4, line5, line6], [line7, line8]] 我相信这就是你所追求的。

关于java - 如何使用java流对由空行分隔的字符串行进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62669318/

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