
集合分组统计处理, 实现的方法很多,简单的写几种方法供参考;(理解后,自行扩展完善)
方法一:(Java8流处理粗略版) 该版本存在的问题:有些区间没有数据,就不打印显示该区间
import javautil;import javautilstream;
public class NumberDemo {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
int numbers = 10;// 集合里数字的个数
int space = 1000;// 区间的间隔
// 给集合里添加数字
Random rd = new Random();
for (int i = 0; i < numbers; i++) {
listadd(rdnextInt(5000)); // 集合里每个数字的范围是0~4999
}
funStream(list, space);
}
private static void funStream(ArrayList<Integer> list, int space) {
// 使用流处理 把 数字分组
Map<String, List<Integer>> map = liststream()collect(CollectorsgroupingBy((num) -> {
return "区间:[" + num / space space + "," + (num / space + 1) space + ")";// 分组规则
}));
mapforEach((k,v)->{
Systemoutprintln(k);
Systemoutprintln("\t"+vsize()+"个数据");
});
}
}
方法二:(Java8流处理详细版) 就算有的区间是0个数据,照样打印出来
import javautil;import javautilstream;
public class NumberDemo2 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
int numbers = 10;// 集合里数字的个数
int space = 1000;// 区间的间隔
// 给集合里添加数字
Random rd = new Random();
for (int i = 0; i < numbers; i++) {
listadd(rdnextInt(5000)); // 集合里每个数字的范围是0~4999
}
funStream(list, space);
}
private static void funStream(ArrayList<Integer> list, int space) {
// 使用流处理 把 数字分组
Map<Integer, List<Integer>> map = liststream()collect(CollectorsgroupingBy((num) -> {
return num / space;// 分组规则
}));
// 获取集合里的最大值
Optional<Integer> maxop = liststream()collect(CollectorsmaxBy(Integer::compareTo));
int max = maxoporElse(0);
// 计算出区间的数量
int groups = max % space == 0 max / space : max / space + 1;
// 打印结果
for (int i = 0; i < groups; i++) {
Systemoutprintln("区间:[" + i space + "," + (i + 1) space + ")");
Systemoutprintln("\t有" + (mapget(i)==null0:mapget(i)size()) + "个数据");
// Systemoutprintln("\t"+mapget(i));//把数据打印出来
}
}
}
方法三:(比较传统的方法)
import javautil;public class NumberDemo3 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
int numbers = 10;// 集合里数字的个数
int space = 1000;// 区间的间隔
//给集合里添加数字
Random rd = new Random();
for (int i = 0; i < numbers; i++) {
listadd(rdnextInt(5000)); // 集合里每个数字的范围是0~4999
}
fun(list,space);
}
private static void fun(ArrayList<Integer> list, int space) {
Collectionssort(list);//排序
int max= listget(listsize()-1);//取得最大值
int groups = max % space == 0 max / space : max / space + 1;//取得区间的数量
HashMap<Integer,ArrayList<Integer>> map=new HashMap<Integer, ArrayList<Integer>>();//存区间和该区间的数字
for (int i = 0; i < groups; i++) {
mapput(i, new ArrayList<>());
}
//把元素添加到指定的区间
for (int i = 0; i < listsize(); i++) {
mapget(listget(i)/space)add(listget(i));
}
//打印结果
for (int i = 0; i < groups; i++) {
Systemoutprintln("区间:[" + i space + "," + (i + 1) space + ")");
Systemoutprintln("\t有"+ mapget(i)size()+"个数据");
//Systemoutprintln("\t"+mapget(i));//把数据打印出来
}
}
}
测试效果如下
区间:[0,1000)有5个数据
区间:[1000,2000)
有0个数据
区间:[2000,3000)
有1个数据
区间:[3000,4000)
有2个数据
区间:[4000,5000)
有2个数据
只需要循环一下,判断即可。
示例代码:
1遍历整个list集合
for(int i=0; i<listsize(); i++){
}
2在for循环中增加判断代码
if(listget(i)equals("指定")){}
3得到每一个item进行判断即可。
//先用contains判断是否有该元素
if(list集合contains(对象)){
list集合indexOf(对象名);
}
因为List 是一个元素有序的、可以重复、可以为 null 的集合;
所以;
indexOf可以获取元素出现的第一个位置的引索,与之相反的是lastlndexOf获取元素最后出现的位置引索,如果集合中没有该元素则返回-1,其原理都是利用equals方法配合历遍来判断。
扩展资料:
C++中list用法详解
1list中的构造函数:
list() 声明一个空列表;
list(n) 声明一个有n个元素的列表,每个元素都是由其默认构造函数T()构造出来的
list(n,val) 声明一个由n个元素的列表,每个元素都是由其复制构造函数T(val)得来的
list(n,val) 声明一个和上面一样的列表
list(first,last) 声明一个列表,其元素的初始值来源于由区间所指定的序列中的元素
以上就是关于java怎样将集合中的数值数据分区间统计个数:例如(0-1000)有几个人数据,1000-2000有几个数据全部的内容,包括:java怎样将集合中的数值数据分区间统计个数:例如(0-1000)有几个人数据,1000-2000有几个数据、android怎么取出list里面特定的数据、java中 如何从LIST 查找指定元素的位置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)