【发布时间】:2021-01-06 16:58:32
【问题描述】:
我有这个清单:
List<String> names= Arrays.asList(new String[]{"Tom", "louis", "martha", "Tom", "john", "Carol", "Tom", "Simon"});
我想创建三个不同的列表,将值放在 Tom word 之间:
"Tom", "louis", "martha";
"Tom", "john", "Carol";
"Tom", "Simon"
我以传统方式处理索引
我的方法很简单;
List<Integer> positionsWithTom = new ArrayList<>();
for(int i=0; i<names.size; i++){
...
positionsWithTom = [0,3,6]
}
然后将值放在不同的列表中
这样做不是很优雅,也许是通过某种方式进行流过滤?
【问题讨论】:
-
我没有方便的 Java 流 API 语法解决方案,但您的直觉是正确的:原则上,这 可以 使用流优雅地完成。首先,您需要计算
"Tom"个元素的累积数量;对于您的示例,这将为您提供序列 1、1、1、2、2、2、3、3。您可以将这些数字用作groupingBy收集器的类。 (这一切都可以一次性完成。) -
我发布了流式和非流式解决方案。我更喜欢后者。
标签: java list java-stream