java中List Stream的简单使用

java中List Stream的简单使用

一,api入门案例
在这里插入图片描述
实体类

public class Person {

    private int id;
    private String name;
    private String desc;
    private int age;

    public Person(){

    }
    public Person(int id, String name, String desc,int age) {
        this.id = id;
        this.name = name;
        this.desc = desc;
        this.age=age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }

    public static List<Person> createSomeData(){
        List<Person> list = new ArrayList<>();
        list.add(new Person(1,"旺财1","是旺财呀",3));
        list.add(new Person(1,"旺财1111","是旺财呀11",5));
        list.add(new Person(2,"旺财2222","是旺财呀222",7));
        list.add(new Person(3,"来福","一百岁的来福",100));
        list.add(new Person(4,"常威","这个是一岁的常威",1));
        list.add(new Person(5,"测试","相同一岁",1));
        return list;
    }


    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }
}

api入门案例截图
在这里插入图片描述

下面的参考:https://www.cnblogs.com/jobbible/p/9999574.html

/**
     * 测试分组:按照id分组
     */
    public static void testGroupBy(){

        List<Person> someData = Person.createSomeData();
        //返回的Map集合中的key就是分组条件的类型
        Map<Integer, List<Person>> collect = someData.stream()
                .collect(Collectors.groupingBy(Person::getId));
        System.out.println("根据id分组结果:"+collect);
    }

    /**
     * 把list变为map
     * 如果list有重复的key,会报错Duplicate key ....
     *  可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2,所以,只有旺财1被保存到map,旺财1111没了
     */
    public static void list2Map(){
        List<Person> someData = Person.createSomeData();
        Map<Integer, Person> collect = someData.stream()
                .collect(Collectors.toMap(Person::getId, a -> a, (k1, k2) -> k1));
        System.out.println("list2Map:"+collect);
    }

    //过滤:返回名字包含旺财的list集合
    public static void filterList(){
        List<Person> someData = Person.createSomeData();
        Stream<Person> stream = someData.stream().filter(person -> person.getName().contains("旺财"));

        List<Person> list = stream.collect(Collectors.toList());
        System.out.println("过滤:"+list);
    }

    //求和,所有age累加
    public static void calcuateAge(){
        List<Person> someData = Person.createSomeData();
        //int类型求和
        int sum = someData.stream().mapToInt(Person::getAge).sum();
        System.out.println("age求和:"+sum);
    }

    /**
     * 最大值和最小值:
     * ifPresent() (如果值存在则执行代码块)
     *  isPresent()将返回true,get()将返回值。
     */
    public static void maxAndMin(){

        Optional<Person> collect = Person.createSomeData().stream()
                .collect(Collectors.maxBy(Comparator.comparing(Person::getAge)));

        collect.ifPresent(person -> System.out.println("最大年龄:"+person.getName()+",age:"+person.getAge()));

        //最小年龄
        Optional<Person> min = Person.createSomeData().stream()
                .collect(Collectors.minBy(Comparator.comparing(Person::getAge)));

        Person person = min.get();
        System.out.println("最小年龄:"+person);
        min.ifPresent(System.out::println);
       /* Optional<Dish> minDish = Dish.menu.stream().
                collect(Collectors.minBy(Comparator.comparing(Dish::getCalories)));
        minDish.ifPresent(System.out::println);*/
    }


    public static void uniqueTest(){
        // 根据id去重
        List<Person> unique = Person.createSomeData().stream().collect(
                collectingAndThen(
                        toCollection(() -> new TreeSet<Person>(comparingLong(Person::getId))), ArrayList::new)
        );

        System.out.println("去重:"+unique);
    }

根据对象某一属性分组返回对象该属性的集合

//返回id集合
List<String> collect = Person.listPerson().stream().map(Person::getId).collect(Collectors.toList());
        String[] strings = new String[collect.size()];
        String[] strings1 = collect.toArray(strings);
        System.out.println(strings1.length);

根据对象某一属性分组,返回一个list对象

//根据分包id进行分组
        Map<String, List<TSuppRevCon>> map = list.stream()
                .collect(Collectors.groupingBy(TSuppRevCon::getPackageId));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值