Lambda操作记录二

package com.segi.uhomecp.meter.test;

import com.alibaba.fastjson.JSON;
import com.segi.uhomecp.meter.test.vo.People;
import com.segi.uhomecp.meter.test.vo.Student;

import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Test4 {

        public static void main(String[] args) {
            //Collectors toMap
            List<Student> list=new ArrayList<>();
            Map<Integer, Student> collect1 = list.stream().collect(Collectors.toMap(Student::getId, student -> student));
            List<Student> list2 = new ArrayList<Student>();
            list2.add(new Student(1, "Mahesh", 12));
            list2.add(new Student(2, "Suresh", 15));
            list2.add(new Student(3, "Nilesh", 10));
            list2.add(new Student(4, "Ailesh", 17));
            list2.add(new Student(5, "Dilesh", 13));
            list2.add(new Student(6, "Dilesh", 18));
            list2.add(new Student(6, "Dilesh", 18));
            //List集合转 Map
            List<People> peopleList=new ArrayList<People>();
            peopleList.add(new People("test6", "666"));
            peopleList.add(new People("test7", "777"));
            peopleList.add(new People("test1", "222"));
            peopleList.add(new People("test1", "111"));
            peopleList.add(new People("test2", "222"));
            peopleList.add(new People("test3", "333"));
            peopleList.add(new People("test4", "444"));
            peopleList.add(new People("test5", "555"));
            Map<String, List<People>> collect5 = peopleList.stream().collect(Collectors.groupingBy(People::getName));
            System.out.println(collect5);
            Map<String, String> collect = peopleList.stream().collect(Collectors.toMap(People::getName, People::getAge,(key1,key2)->key2));
            System.out.println(collect);
            //Collectors toList
            List<Integer> collect2 = Stream.of(1, 2, 3, 4, 5, 6, 6).map(a->a+a).collect(Collectors.toList());
            System.out.println(collect2);
            //map 方法用于映射每个元素到对应的结果,以下代码片段使用 map 输出了元素对应的平方数:
            List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
            // 获取对应的平方数
            List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
            System.out.println(squaresList);
            //Collectors 类实现了很多归约操作,例如将流转换成集合和聚合元素。Collectors 可用于返回列表或字符串:
            List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
            List<String> collect3 = strings.stream().filter(s -> !s.isEmpty()).collect(Collectors.toList());
            String collect4 = strings.stream().filter(s -> !s.isEmpty()).map(s -> s+"1").collect(Collectors.joining(","));
            System.out.println(collect3);System.out.println(collect4);
            //一些产生统计结果的收集器也非常有用。它们主要用于int、double、long等基本类型上,它们可以用来产生类似如下的统计结果。
            IntSummaryStatistics intSummaryStatistics = numbers.stream().mapToInt(x -> x).summaryStatistics();
            System.out.println(intSummaryStatistics);
            List<Student> collect7 = list2.stream().sorted(Comparator.comparing(Student::getAge).reversed()).collect(Collectors.toList());
            System.out.println(JSON.toJSON(collect7));
            final String collect6 = list2.stream().collect(Collectors.mapping(Student::getName, Collectors.joining(",", "[", "]")));
            System.out.println(collect6);
            Map<Integer, String> collect8 = list2.stream().collect(Collectors.groupingBy(Student::getId, Collectors.mapping(Student::getName, Collectors.joining(",", "[", "]"))));
            System.out.println(collect8);
            // //1.1根据某个属性分组计数
            Map<String, Long> collect9 = list2.stream().collect(Collectors.groupingBy(Student::getName, Collectors.counting()));
            System.out.println(collect9);
            //1.2根据整个实体对象分组计数,当其为String时常使用
            Map<Student, Long> collect10 = list2.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
            System.out.println(JSON.toJSON(collect10));
            //1.3根据分组的key值对结果进行排序、放进另一个map中并输出
            Map<String,Long> xMap=new HashMap<>();
            collect9.entrySet().stream().sorted(Map.Entry.<String, Long>comparingByKey().reversed()).forEachOrdered(x->xMap.put(x.getKey(),x.getValue()));
            System.out.println(xMap);
            //2.分组,并统计其中一个属性值得sum或者avg:id总和
            Map<Integer, Integer> collect11 = list2.stream().collect(Collectors.groupingBy(Student::getId, Collectors.summingInt(Student::getAge)));
            System.out.println(collect11);


            //Collectors 的方法操作集合
            List<String> list3 = Arrays.asList("11","3","134","1544","16444","73","318","3320");
            //生成一个用于获取最小/最大值的Optional结果的Collector。
            Optional<String> collect12 = list3.stream().max((a, b) -> a.length() - b.length());
            System.out.println(collect12);
            //生成一个用于求元素和的Collector,首先通过给定的mapper将元素转换类型,然后再求和。参数的作用就是将元素转换为指定的类型,最后结果与转换后类型一致。
            int i = list3.stream().limit(2).collect(Collectors.summingInt(Integer::valueOf));
            long l = list3.stream().limit(5).collect(Collectors.summingLong(Long::valueOf));
            double d = list3.stream().limit(6).collect(Collectors.summingDouble(Double::valueOf));
            System.out.println(i +"\n" +l + "\n" + d);
             无初始值的情况,返回一个可以生成Optional结果的Collector
            System.out.println(list3.stream().limit(2).map(String::length).collect(Collectors.reducing(Integer::sum)));
             有初始值的情况,返回一个可以直接产生结果的Collector
            System.out.println(list3.stream().limit(3).map(String::length).collect(Collectors.reducing(0, Integer::sum)));
             有初始值,还有针对元素的处理方案mapper,生成一个可以直接产生结果的Collector,元素在执行结果操作op之前需要先执行mapper进行元素转换操作
            System.out.println(list3.stream().limit(4).collect(Collectors.reducing(0,String::length,Integer::sum)));
            //groupingBy
            // 只需一个分组参数classifier,内部自动将结果保存到一个map中,每个map的键为?类型(即classifier的结果类型),值为一个list,这个list中保存在属于这个组的元素。
            Map<Integer,List<String>> s = list3.stream().collect(Collectors.groupingBy(String::length));
            // 在上面方法的基础上增加了对流中元素的处理方式的Collector,比如上面的默认的处理方法就是Collectors.toList()
            Map<Integer,List<String>> ss = list3.stream().collect(Collectors.groupingBy(String::length, Collectors.toList()));
            // 在第二个方法的基础上再添加了结果Map的生成方法。
            Map<Integer,Set<String>> sss = list3.stream().collect(Collectors.groupingBy(String::length,HashMap::new,Collectors.toSet()));
            System.out.println(s.toString() + "\n" + ss.toString() + "\n" + sss.toString());
            //只需一个校验参数predicate
            Map<Boolean,List<String>> map = list3.stream().collect(Collectors.partitioningBy(e -> e.length()>2));
            //在上面方法的基础上增加了对流中元素的处理方式的Collector,比如上面的默认的处理方法就是Collectors.toList()
            Map<Boolean,Set<String>> map2 = list3.stream().collect(Collectors.partitioningBy(e -> e.length()>3,Collectors.toSet()));
            System.out.println(map.toString() + "\n" + map2.toString());
            //toMap
            Map<String,String> map11 = list3.stream().limit(2).collect(Collectors.toMap(e -> e.substring(0,1),e -> e));
            Map<String,String> map22 = list3.stream().collect(Collectors.toMap(e -> e.substring(0,1),e->e,(a,b)-> b));
            Map<String,String> map33 = list3.stream().collect(Collectors.toMap(e -> e.substring(0,1),e->e,(a,b)-> b,HashMap::new));
            System.out.println(map11.toString() + "\n" + map22.toString() + "\n" + map33.toString());

        }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值