我正在使用Java8流
我有一个类,如下所示:
public class ShareDao {
private String senderId;
private String receiverId;
public String getSenderId() {
return senderId;
}
public String sharingMode(){
return this.receiverId != null && !this.receiverId.trim().isEmpty() ? "incoming" : "outgoing";
}
}
现在我想做的是:
下面是我的代码:
Map<String, Map<String, List<ShareDao>>> p = records.stream()
.filter(shared -> userMap.containsKey(shared.getSenderId()))
.collect(Collectors.groupingBy(ShareDao::getSenderId), Collectors.groupingBy(ShareDao::sharingMode, Function.identity()));
这给我带来了一个错误:
错误:(105,90)java:找不到适用于groupingBy(共享[…]的方法gMode,java。util。作用函数)方法java。util。流动收藏家。groupingBy(java.util.function.function)不适用(无法推断类型变量T,K(实际参数列表和形式参数列表长度不同))方法java。util。流动收藏家。groupingBy(java.util.function.function,java.util.stream.Collector)不适用(不存在变量类型的实例,因此java。util。作用函数符合java。util。流动收集器)方法。util。流动收藏家。groupingBy(java.util.function.function、java.util.function.Supplier、java.util.stream.Collector)不适用(无法推断类型变量T、K、D、A、M(实际参数列表和形式参数列表长度不同))
当Intellij Idea
引发错误时
不能从静态上下文引用非静态方法
基于你想达到的目的
您可以使用:
Map<String, Map<String, List<ShareDao>>> p = records.stream()
.filter(shared -> userMap.containsKey(shared.getSenderId())) // filter records
.collect(Collectors.groupingBy(ShareDao::getSenderId, // grouping by senderId
Collectors.groupingBy(ShareDao::sharingMode))); //further grouping by sharingMode
注:
>
GroupingBy
属性导致值被聚合为List
。
Collector
在集合
中定义,因为它与您的尝试不同。
我有下面的课
问题内容: 我的清单包含大小等的集合。我尝试这样做,但似乎不起作用。 我想要的最终结果是。 我可以尝试添加在所有的元素和那种出来再做出新的的。但是,有某种班轮吗? 更新: 这可行,但是可以简化吗? 问题答案: @Eugene的回答很甜蜜,因为番石榴很甜。但是,如果您碰巧在类路径中没有番石榴,这是另一种方式: 首先,我将所有集合映射到一个流中,然后对所有元素进行排序,最后,将整个排序后的流收集到集合
我正在使用java lambda对列表进行排序。 我怎样才能反向排序呢?
我有这个列表,我想按保留顺序订购,但我没有在自动完成辅助中找到任何函数 我也尝试过: 但是我有编译错误:
我有一个订单列表,我想使用Java8Stream和Collectors按用户分组。GroupingBy: 这将返回包含用户和订单列表的映射: 我不需要整个对象User,只需要它的username字段,它是一个字符串,所以我想获得如下内容: 我试图使用stream.map将用户映射到username字段,但无法正确实现。我怎样才能尽可能简单地做到这一点呢?
<代码>list.stream()。 列表中的每个项目都将从数据库中删除。 假设列表中有3个项目,如何进行单元测试: 删除被调用了3次。 删除被称为“按顺序/顺序”,即列表中的元素顺序?