常见的统计操作:(sum/average/max/min/count)

package com.ydlclass.feature;

import org.junit.Before;
import org.junit.Test;

import java.util.*;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.IntStream;

public class LambdaTest {
    List<Person> personList = new ArrayList<>();
    List<Integer> simpleList = Arrays.asList(15,22,9,11,33,52,14);
    @Before
    public void initData(){
        personList.add(new Person("张三",3000,23,"男","太原"));
        personList.add(new Person("李四",7000,34,"男","西安"));
        personList.add(new Person("王五",5200,22,"女","西安"));
        personList.add(new Person("小黑",1500,33,"女","上海"));
        personList.add(new Person("狗子",8000,44,"女","北京"));
        personList.add(new Person("铁蛋",6200,36,"女","南京"));
    }
    

    /***
     * 终止操作之统计操作count,average,sum,max,min
     */

    @Test
    public void countTest(){//流操作的意义在于中间操作比较多的时候体现出来
        long count = personList.stream().count();
        System.out.println(count);

    }

    @Test
    public void averageTest(){//需要保证int类型的Stream
        OptionalDouble average = simpleList.stream().mapToInt(i -> i).average();//使用此方法将引用数据类型
        // 映射至基础数据类型int;并且toIntFunction这个函数会将传入的值变为int,即使此处传入的是Integer类型的,
        //会由于自动拆装箱变为int类型的
        average.ifPresent(System.out::println);


    }

    @Test
    public void sumTest(){
        int sum = simpleList.stream().mapToInt(i -> i).sum();
        System.out.println(sum);

        //求和
        IntStream intStream = IntStream.of(1, 2, 3, 4, 5);
        System.out.println(intStream.sum());
    }

    @Test
    public void maxTest(){
        OptionalInt max = simpleList.stream().mapToInt(i -> i).max();
        max.ifPresent(System.out::println);
    }

    @Test
    public void minTest(){
        OptionalInt min = new Random().ints(20).min();
        min.ifPresent(System.out::println);

    }




}