【发布时间】:2020-07-01 03:28:13
【问题描述】:
我有这样的课。
public class Foo {
private String prefix;
private String sector;
private int count;
}
给定一个 foo 列表:
//Args: prefix, sector, count
fooList.add(new Foo("44",,"RowC", 1 ));
fooList.add(new Foo("1",,"Rowa", 1 ));
fooList.add(new Foo("1",,"RowB", 1 ));
fooList.add(new Foo("1",,"Rowa", 1 ));
我需要返回请求一个对象按前缀 asc 排序,如下所示:
{
"1": {
"Rowa": "2",
"RowB": "1"
},
"44": {
"RowC": "1"
}
}
所以问题是: 我必须按前缀对列表进行分组,然后显示每个扇区以及列表中具有相同行和扇区的项目的计数(*)。 我得到的远是使用这样的流:
fooList.stream()
.collect(Collectors.groupingBy(
Foo::getPrefix,
Collectors.groupingBy(
Foo::getSector,
Collectors.mapping(Foo::getSector , Collectors.counting())
)
));
问题是,上面的代码是计数是长的,我需要作为字符串返回。 我试过 .toString 但它给了我一个错误(可以将 java.lang.String 分配给 java.util.stream.Collector)。
更新
在 Andreas 和 Naman 的帮助下,现在我可以将 count 映射为 String。 我只需要按前缀排序。
谁能帮帮我?
【问题讨论】:
-
执行
Collectors.counting().toString()将具有String类型并将其放在预期Collector的位置会引发编译时错误。使用Collectors.collectingAndThen(Collectors.counting(), String::valueOf)会帮助你。 -
谢谢,纳曼。我怎样才能让它按前缀排序?
-
@ErickDeMirandaOliveira - 如果我的回答有帮助,请告诉我。
标签: java list java-stream collectors