我尝试使用Java8特性。
我有课
@Data
@NoArgsConstructor
@AllArgsConstructor
class User {
private String pId;
private String uId;
private String price;
}
我有一个列表,我尝试按PID
分组,并计算非空的UID
和Price
。示例:
List<User> list =
Arrays.asList(
new User ("p1", "u1", null),
new User ("p1", "u2", "a"),
new User ("p2", null, "b"),
new User ("p2", null, "c"),
new User ("p3", "u4", "d")
);
我的预期输出是
[
{ pId:"p1", uCount:2, priceCount:1 },
{ pId:"p2", uCount:0, priceCount:2 },
{ pId:"p3", uCount:1, priceCount:1 }
]
我试着跟在后面
Map<String, Map<Object, Long>> collect =
list.stream()
.collect(
Collectors.groupingBy(
User ::getPId,
Collectors.groupingBy(f -> f.getUId(), Collectors.counting())));
@Data
@NoArgsConstructor
@AllArgsConstructor
class Stat {
private String pId;
private Integer uCount;
private Integer priceCount;
}
因为我是刚到java的,我面临着要完成它的斗争,我尽了最大的努力。是否可以删除空文件和计数?
你能试试下面的解决方案吗?它将提供正确的输出:
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<User> list =
Arrays.asList(
new User ("p1", "u1", null),
new User ("p1", "u2", "a"),
new User ("p2", null, "b"),
new User ("p2", null, "c"),
new User ("p3", "u4", "d")
);
Set<Stat> set = list.stream().map(s -> new Stat(s.getPId(), 0, 0)).collect(Collectors.toSet());
set = set.stream().map(s -> updateCounts(list, s.getPId())).collect(Collectors.toSet());
System.out.println(set);
}
public static Stat updateCounts(List<User> list, String pId) {
Long uCount = list.stream().filter(s -> pId.equals(s.getPId()) && Objects.nonNull(s.getUId()))
.collect(Collectors.counting());
Long priceCount = list.stream().filter(s -> pId.equals(s.getPId()) && Objects.nonNull(s.getPrice()))
.collect(Collectors.counting());
return new Stat(pId, Integer.valueOf(uCount+""), Integer.valueOf(priceCount+""));
}
}
我尝试使用Java8特性。 我有课 我的最后一个映射类是 因为我是刚到java的,我面临着要完成它的斗争,我尽了最大的努力。是否可以删除空文件和计数?提前致谢
问题内容: 我有一个数据库: 我想选择所有条目,但有一个例外: 与的所有条目均应分组 *与的 *最后一个条目应在之后 这是我期望的结果: 到目前为止,我已经做到了这一点(注意:“ change_count” = COUNT): 那就是我得到的: 如您所见,结果有两个问题: 条目按首次出现分组(应为last(最新)) 也被分组(不应该被分组) 我上面描述的任务可以实现吗?我该怎么做? 编辑: 问题答
问题内容: 我有一个包含用户数据的类,如下所示: 我需要计算非字段,以显示用户已填充的配置文件的百分比。还有一些,我不希望在百分比计算要考虑几个字段:,和。 一种简单的方法是使用多个语句来获取非null字段,但这将涉及大量样板代码,并且还有一个我需要显示完成百分比的类。因此,我创建了一个实用程序函数,如下所示: 然后我按如下所示调用此函数: 我的问题是,这是我不算数字段还是可以进一步改进的最佳方法
问题内容: 我从这样的数据库中提取了数据(为简单起见,将其简化),我想添加一个称为“百分比”的列。 先感谢您 问题答案: 内部选择得到s的和。
问题内容: 我的ElasticSearch 6.5.2索引看起来像: 我想要一个返回此结果的查询: 我只想按发生次数分组并获取每个事件的数量,最多只能有十个数字。我尝试使用聚合,但存储桶为空。谢谢! 问题答案: 案例映射 您的查询应如下所示 您应该添加以启用聚集 文本 类型的字段更多的是 在与@Kamal简短讨论之后,我有义务告诉您,如果选择启用,则必须知道它会占用大量堆空间。 通过我分享的链接:
问题内容: (如果标题更好,请进行编辑,我无法正确解释!:)这是我的代码: 这是: 我应该打印出使用过的字母以及使用了多少次,我的代码可以正常工作,但是我需要按字母顺序排列,我尝试将它们放在列表中然后进行排序,但是我不太明白想法?提前致谢! 问题答案: 每当进行计数时,您都可以在这里使用: 如果您无法导入任何模块,则可以追加到列表中然后对其进行排序: 或者,使用列表推导: 最后,要对其进行排序,只