• java8 .stream().sorted().filter().map().collect()用法


    https://blog.csdn.net/shine_guo_star/article/details/94383319

    steam():把一个源数据,可以是集合,数组,I/O channel, 产生器generator 等,转化成流。

    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());

    filter():filter 方法用于通过设置的条件过滤出元素。以下代码片段使用 filter 方法过滤出空字符串:

    List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
    // 获取空字符串的数量
    int count = strings.stream().filter(string -> string.isEmpty()).count();

    sorted(): 用于对流进行排序。以下代码片段使用 sorted 方法对输出的 10 个随机数进行排序:

    Random random = new Random();
    random.ints().limit(10).sorted().forEach(System.out::println);
    

     Collectors: 类实现了很多归约操作,例如将流转换成集合和聚合元素。Collectors 可用于返回列表或字符串:

    List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
    
    List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
    System.out.println("筛选列表: " + filtered);
    
    String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
    System.out.println("合并字符串: " + mergedString);
    
    //对象类型stream排序
    List<User> users = new ArrayList<User>(){
        {
            add(new User("a", "1983/12/24", 36));
            add(new User("a", "1993/12/24", 26));
            add(new User("a", "1973/12/24", 46));
            add(new User("a", "1995/12/24", 24));
            add(new User("a", "1981/12/24", 38));
            add(new User("a", "1991/12/24", 28));
        }
    };
    
    //升序
    List<User> ascUsers = users.stream().sorted(Comparator.comparing(User :: getAge)).collect(Collectors.toList());
    //降序
    List<User> descUsers = users.stream().sorted(Comparator.comparing(User :: getAge).reversed()).collect(Collectors.toList());
    
    用户类:必须继承Comparable接口,否则排序调用Comparator.comparing的时候会报错,这点很重要。
    public class User implements Comparable<User> {
    
        @NotNull
        private String name;
    
        @Format(value="YYYY-MM-DD", message = "字符串格式不正确")
        private String birthday;
    
        private int age;
    
        public User(){
        }
    
        public User(String name, String birthday, int age){
            this.name = name;
            this.birthday = birthday;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getBirthday() {
            return birthday;
        }
    
        public void setBirthday(String brithday) {
            this.birthday = birthday;
        }
    
        /**
         * 两个相同类型的对象,比较多属相是否相等的时候
         * 可以通过重写equals方法来实现
         * @param object
         * @return
         */
    
        @Override
        public boolean equals(Object object) {
            if (object instanceof User) {
                return this.name.equals(((User) object).getName()) && this.age == ((User) object).getAge();
            } else {
                return false;
            }
        }
    
        /**
         * 重写 equals 就应当重写 hashcode
         * 因为当两个对象hashcode 值相等,但是 equals 比较为 false,
         * 那么在 HashMap 中会产生链表,影响查询性能
         * @return
         */
        @Override
        public int hashCode() {
            return  this.name.hashCode() + age;
        }
    
        @Override
        public int compareTo(User user) {
            return name.compareTo(user.getName());
        }
    }
    
  • 相关阅读:
    Android view显示在软键盘上方
    ListView子项点击无反应的解决办法
    adb for mac
    Android文件的流操作工具类
    Linux之间配置SSH互信(SSH免密码登录)
    最简单的Linux虚拟机磁盘扩容方法
    Grunt + Bower—前端构建利器
    Microsoft Office 2016 简体中文 Vol 版镜像下载(Pro Plus、Visio、Project 下载)
    如何在windows下安装GIT
    如何在Crystal框架项目中内置启动MetaQ服务?
  • 原文地址:https://www.cnblogs.com/toria/p/13204711.html
Copyright © 2020-2023  润新知