java的常见数据处理和数据结构理解

java的常见数据处理和数据结构理解

数据集合

Set
虽然 TreeMap 和TreeSet 实现的接口规范不同,但 TreeSet 底层是通过 TreeMap 来实现的(如同HashSet底层是是通过HashMap来实现的一样,HashSet是根据HashMap的key存值,所以不能有相同值),因此二者的实现方式完全一样。而 TreeMap 的实现就是红黑树算法。
都是非同步集合,因此他们不能在多线程之间共享,不过可以使用方法Collections.synchroinzedMap()来实现同步
HashSet这是根据hashmap的key值存取元素

Lambada的应用

去重

List<TeacherClass>ones=teacherClasses.stream().collect( Collectors.collectingAndThen(Collectors.toCollection(()->new TreeSet<>(Comparator.comparing(z->z.getUser().getUserName()+z.getYear().getId()))),ArrayList::new));
TeacherClass实体类根据z.getUser().getUserName() z.getYear().getId() 去重

排序

	List<Strudent> tempSts=sts.stream().sorted(Comparator.comparing(student::getCode).reversed()).collect(Collectors.toList());

根据屬性取值

List<School> scs = list.stream().map(p -> p.getSchool()).collect(Collectors.toList());是一个list 使用School型集合

分组

partitioningBy和groupingBy 返回值都是Map,不过partitioningBy 的key是boolean

区间分组统计

 * 区间统计
 * @author chenqiao
 *
 */
 public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
        int numbers = 10;// 集合里数字的个数
        int space = 10;// 区间的间隔
        // 给集合里添加数字
        Random rd = new Random();
        for (int i = 0; i < numbers; i++) {
            list.add(rd.nextInt(100)); // 集合里每个数字的范围是0~4999
        }
        funStream(list, space);
    }
    static void sortMap(Map<String, Long> param) {
        TreeMap<String, Long> paramTreeMap = new TreeMap<>(param);
        System.out.println(paramTreeMap);
    }
    private static void funStream(List<Integer> list, int space) {
        // 使用流处理 把 数字分组
        Map<String, Long> map = list.stream().collect(Collectors.groupingBy((num) -> {
            return "区间:[" + num / space * space + "," + (num / space + 1) * space + ")";// 分组规则
        },Collectors.counting()));
        sortMap(map);
    }

运行结果:
{区间:[0,10)=1, 区间:[20,30)=2, 区间:[40,50)=2, 区间:[70,80)=1, 区间:[80,90)=1, 区间:[90,100)=3}

使用map reduce计算分数在60分一下的分数总和

 List<Student> studentList = InitData.getStudent();
        Optional<Integer> score = studentList.stream()
                .map(Student :: getScore)
                .filter(s -> s>60)
                .reduce((a,b) -> a+b); //没有60分以下的,以前不加判断就会出现空指针异常
        System.out.println(score.orElse(0));   //0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值