java怎样将集合中的数值数据分区间统计个数:例如(0-1000)有几个人数据,1000-2000有几个数据

java怎样将集合中的数值数据分区间统计个数:例如(0-1000)有几个人数据,1000-2000有几个数据,第1张

集合分组统计处理, 实现的方法很多,简单的写几种方法供参考;(理解后,自行扩展完善)

方法一:(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 查找指定元素的位置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9592012.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存