List流式操作,排序、最大、最小值等各种操作工具类(java8 )

不废话直接上代码,亲测有效。


import java.util.*;
import java.util.stream.Collectors;

import static java.util.stream.Collectors.*;

public class listTest {
    public static void main(String[] args) {
        List<User> list=new ArrayList<>();
        list.add(new User(21l,"张三"));
        list.add(new User(25L, "李四"));
        list.add(new User(22L, "王五"));
        list.add(new User(19L, "赵柳"));
        list.add(new User(32L, "王5"));
        list.add(new User(29L, "王6"));
        list.add(new User(21L, "王7"));

        //对象根据年龄属性升序排列
        List<User> ageList=list.stream().sorted(Comparator.comparing(User::getAge)).collect(toList());

        //对象根据年龄属性降序排列
        List<User> agejList=list.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(toList());

        //list遍历
        ageList.forEach(System.out::println);
        System.out.println("========================");
        agejList.forEach(System.out::println);

        //平均数
        double asDouble=list.stream().mapToDouble(User::getAge).average().getAsDouble();
        System.out.println("average:"+asDouble);

        double avg=list.stream().collect(Collectors.averagingLong(User::getAge));
        System.out.println("avg:"+avg);

        //最大值
        long asLong=list.stream().mapToLong(User::getAge).max().getAsLong();
        System.out.println("max:"+asLong);

        //最小值
        long asLong1=list.stream().mapToLong(User::getAge).min().getAsLong();
        System.out.println("min:"+asLong1);


        //求和
        long sum=list.stream().mapToLong(User::getAge).sum();
        System.out.println("sum:"+sum);

        //提取对象属性生成list
        List<Long> agesList=list.stream().map(User::getAge).collect(toList());
        System.out.println("agesList:"+agesList);

        //list升序
        Collections.sort(agesList);
        System.out.println(agesList);

        //生成中位数
        Long j;
        if(agesList.size()%2==0){
            j=(agesList.get(agesList.size()/2-1)+agesList.get(agesList.size()/2))/2;
            System.out.println("中位数为:"+j);
        }else {
            j=agesList.get(agesList.size()/2);
            System.out.println("中位数为:"+j);
        }

        //list倒序排列
        agesList.sort(Comparator.reverseOrder());
        System.out.println("倒序:"+agesList);

        //list去重
        List<User> userList=list.stream().collect(collectingAndThen(toCollection(()-> new TreeSet<>(Comparator.comparingLong(User::getAge))),ArrayList::new));
        System.out.println("去重:"+userList);

        /**
         * list->Map
         * 需要注意的是:toMap 如果集合对象有重复的key,会报错Duplicate key ....
         *  apple1,apple12的id都为1。可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2
         */
        Map<Long,User> userMap=list.stream().collect(Collectors.toMap(User::getAge,a->a,(k1,k2)->k1));
        System.out.println("userMap:"+userMap);


        //过滤出符合条件的数据
        List<User> filterList=list.stream().filter(a->a.getName().equals("李四")).collect(toList());
        System.out.println("filterList"+filterList);

        List<Integer> list2=Arrays.asList(1,2,3,4,5);

        int sum2=list2.stream().reduce(0,(acc,value)->acc+value);
        System.out.println("sum2="+sum2);

        List<Integer> result=list2.stream().filter((value)-> value>2).collect(toList());
        result.forEach(System.out::println);

        List<String> result2=list2.stream().map(value->String.format("String:%s",value)).collect(toList());
        result2.forEach(System.out::println);

        //用于收集统计数据的状态对象,例如count,min,max,sum。
        IntSummaryStatistics stats=list2.stream().mapToInt((x)->x).summaryStatistics();
        System.out.println("Max : " + stats.getMax());
        System.out.println("Min: " + stats.getMin());
        System.out.println("Sun: " + stats.getSum());
        System.out.println("Average : " + stats.getAverage());
        System.out.println("Count : " + stats.getCount());
        System.out.println("toString : " + stats.toString());


    }

}



/**
 * 测试类
 */
class User {
    private Long age;
    private String name;

    public  User(Long i,String s){
        this.age=i;
        this.name=s;
    }

    public Long getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}
发布了94 篇原创文章 · 获赞 23 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Carrots_vegetables/article/details/105208377