gpt4 book ai didi

java - 如何使用流计算组内的值

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:23:34 25 4
gpt4 key购买 nike

我正在尝试计算一个范围内的值,我越来越接近了,但我不知道如何输出 0。这是我的目标:

input: 12,34
output:
0 (no values from 0-9)
1 (12 is between 10-19)
0
1 (34 between 30-39)
... (my values are guaranteed to be between 0-100)

到目前为止我的代码:

package javaapplication2;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Collectors;

public class JavaApplication2 {

public static void main(String[] args){
//generating sample data------------------------------
class Temp{
Long vote=ThreadLocalRandom.current().nextLong(100);
public long getVote(){
System.out.println(vote);
return vote;
}
}

ArrayList<Temp> t = new ArrayList<>();
t.add(new Temp());
t.add(new Temp());
t.add(new Temp());
//end generating data------------------------------------
Map<Integer, Long> counters = t.stream()
.collect(Collectors.groupingBy(p -> ((int)p.getVote())/10,
Collectors.counting()));

Collection<Long> values = counters.values();
Long[] res = values.toArray(new Long[values.size()]);
for(Long l:res)
System.out.println(l.toString());
}
}

最佳答案

要使结果包含 0,您可以将范围从 0 到 10 的流映射到您的实际结果:

Map<Integer, Long> map = t.stream()
.collect(Collectors.groupingBy(p -> ((int) p.getVote())/10,
Collectors.counting()));
Map<Integer, Long> result = IntStream.range(0, 10).boxed()
.collect(Collectors.toMap(Function.identity(), i -> map.getOrDefault(i, 0L)));

关于java - 如何使用流计算组内的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48980920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com