java - 如何通过流计算值

标签 java collections java-8

我正在尝试接收具有变量 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.voteLong 类型,您不能将其转换为 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/

相关文章:

Java - Collections.sort() 性能

c# - 存储在集合中的 IDisposable 对象是否应该手动处理?

java - 在哪里可以下载 Eclipse 插件?

java - 如何获得在Axon错误处理程序中产生错误的事件处理程序?

java - datajpatest + springframework 测试Sql编码特殊字符在Windows上失败

java - 如何制作 Stream 的副本,以便在使用它时使用 Java 8 中的副本?

java - 无法从 Json 字符串创建对象列表

java - 在线程调度程序中为已等待和通知的线程设置优先级

mongodb - 迭代 MongoDB 中的集合以进行更新

java - 尽管使用了WeakHashMap,但仍发生OutOfMemoryException