我正在尝试接收具有变量 vote
(0 到 100)的对象流。我正在尝试将每个出现的次数数到十位。例如:
23,44,48 returns 0:1, 1:2, 0:3, 2:4,...
我在这里做错了什么?
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Collectors;
public class NewClass {
public static void main(String[] args){
class Temp{
Long vote=ThreadLocalRandom.current().nextLong(100);
}
ArrayList<Temp> t=new ArrayList();
t.add(new Temp());
t.add(new Temp());
t.add(new Temp());
Map<Integer, Long> counters = t.stream()
.collect(Collectors.groupingBy(p -> {
return ((int)p.vote/10);
}, Collectors.counting()));
Collection<Long> values = counters.values();
Integer[] res = values.toArray(new Long[values.size()]);
}
}
最佳答案
您的代码中似乎有两个错误和一个使用原始 ArrayList
的警告。
第一个问题在这一行:
return ((int)p.vote/10);
p.vote
是 Long
类型,您不能将其转换为 int
类型。这可以通过以下方式解决:
p -> p.vote.intValue() / 10
第二个问题是 res
变量的类型应该是 Long[]
而不是 Integer[]
。
最后,可以通过更改以下内容来删除警告:
ArrayList<Temp> t = new ArrayList();
为此:
ArrayList<Temp> t = new ArrayList<>();
完整代码:
ArrayList<Temp> t = new ArrayList<>();
t.add(new Temp());
t.add(new Temp());
t.add(new Temp());
Map<Integer, Long> counters =
t.stream()
.collect(Collectors.groupingBy(p -> p.vote.intValue()/10,
Collectors.counting()));
Collection<Long> values = counters.values();
Long[] res = values.toArray(new Long[values.size()]);
关于java - 如何通过流计算值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48979628/