我尝试在Java 8流API中找到一种简单的方法来进行分组,我提出了这种复杂的方法!
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("Hello");
list.add("World");
Map<String, List<String>> collect = list.stream().collect(
Collectors.groupingBy(o -> o));
System.out.println(collect);
List<String[]> collect2 = collect
.entrySet()
.stream()
.map(e -> new String[] { e.getKey(),
String.valueOf(e.getValue().size()) })
.collect(Collectors.toList());
collect2.forEach(o -> System.out.println(o[0] + " >> " + o[1]));
感谢你的投入。
我认为你只是在寻找过载,它需要另一个负载Collector
来指定对每个组执行的操作…然后Collectors.counting()
进行计数:
import java.util.*;
import java.util.stream.*;
class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("Hello");
list.add("World");
Map<String, Long> counted = list.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(counted);
}
}
结果:
{Hello=2, World=1}
(也有可能使用groupingByConcurrent
来提高效率。如果在你的上下文中安全的话,请记住你的真实代码。)
我有一个订单列表,我想使用Java8Stream和Collectors按用户分组。GroupingBy: 这将返回包含用户和订单列表的映射: 我不需要整个对象User,只需要它的username字段,它是一个字符串,所以我想获得如下内容: 我试图使用stream.map将用户映射到username字段,但无法正确实现。我怎样才能尽可能简单地做到这一点呢?
哦,那些狡猾的Java8条带有lambdas的溪流。它们非常强大,但是复杂的东西需要一点时间来包裹它。 假设我有一个类型,其属性为。假设我有这些用户的地图 ?
我正在使用我有一个类,如下所示: 现在我想做的是: 筛选出senderId无效的记录(使用映射) 下面是我的代码: 这给我带来了一个错误: 错误:(105,90)java:找不到适用于groupingBy(共享[…]的方法gMode,java。util。作用函数)方法java。util。流动收藏家。groupingBy(java.util.function.function)不适用(无法推断类型变
我在流中使用分组: 1:我想知道如何在Collect方法中使用“Grouping By”两次。 2:其次,在分组中定义退货类型的策略是什么? 1: 错误消息: 1:线程“main”java中出现异常。RuntimeException:不可编译的源代码-不兼容的类型:推理变量D具有不兼容的等式约束。字符串,java。lang.Integer在collectorsinjava。收藏家辛加瓦。main(
我有以下两门课: : : 我希望进行流操作,以便: 将映射到中的 的和分别合并到和中,对于所有具有相同id的s 为此,我编写了以下一段代码: 它的工作和输出如下: 但我相信有一种更好的方式可以达到同样的效果。任何一个指针都很好。
有没有非终端版本的或其他一些简洁的方式来流式传输生成的Map条目/值? 我发现自己想在分组后流过值但我能想到的最好的方法并不漂亮: