【问题标题】:how to count values via stream如何通过流计算值
【发布时间】:2018-02-25 23:33:18
【问题描述】:

我正在尝试接收具有变量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()]);
        }
}

【问题讨论】:

  • 错误是什么?
  • 我相信 res 变量应该是 Long[] 类型。
  • @Aominè 是的,或者可能是ArrayList的初始化(缺少&lt;&gt;),不记得是发出警告还是错误。
  • @FedericoPeraltaSchaffner 没有注意到这一点。大声喊叫!。

标签: java collections java-8


【解决方案1】:

您的代码中似乎有两个错误和一个使用原始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()]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-17
    • 2017-04-19
    • 2021-12-19
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 2020-10-11
    • 2015-07-12
    相关资源
    最近更新 更多