zoukankan      html  css  js  c++  java
  • java串行流Stream

    • stream() − 为集合创建串行流。

    • parallelStream() − 为集合创建并行流。

    在最近的测试中,发现流Stream用的频率非常高,类似SQL的操作

    参考来源:https://www.runoob.com/java/java8-streams.html

    两个基本特征

    1、Pipelining:中间操作都会返回流对象本身,这样多个操作可以串联成一个管道

    2、内部迭代:以前对集合遍历都是通过Iterator或者For-Each的方式, 显式的在集合外部进行迭代。 Stream提供了内部迭代的方式, 通过访问者模式(Visitor)实现。

    import java.util.*;
    import java.util.stream.Collectors;
    
    public class test {
        // Stream的来源,可以是集合、数组、I/Ochannel、生成器generator
        public static void main(String[] args) {
            // ints(), 生成无限的整数Stream
            // limit, 用于获取指定数量的流
            // forEach,迭代流中的每个数据
            Random random = new Random();
            random.ints().limit(10).forEach(System.out::println);
    
            // map,映射每个元素到对应的结果
            // distinct,去重
            // sorted,排序
            // filter,筛选出符合条件的数据
            // collect(Collectors.toList()) 因为前面获得的是Stream,需要转成目标对象
            List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
            List<Integer> squaresList = numbers.stream().
                    map(i -> i * i).
                    filter(integer -> integer > 5).
                    distinct().
                    sorted().
                    limit(3).
                    collect(Collectors.toList());
            System.out.println("map映射结果+distinct去重+sorted排序+limit:" + squaresList);
    
            List<Person> people = new ArrayList<Person>();
            people.add(new Person("C", 21));
            people.add(new Person("T", 20));
            people.add(new Person("B", 35));
            people.add(new Person("A", 22));
            people.sort(Comparator.comparing(Person::getName));
            people.forEach(System.out::println);
            // max,拿到属性最大值的那个对象,最后需要get()获得
            // min,拿到属性最大值的那个对象,最后需要get()获得
            Person min = people.stream().min(Comparator.comparing(Person::getAge)).get();
            Person max = people.stream().max(Comparator.comparing(Person::getAge)).get();
            System.out.println("年龄最大:" + max);
            System.out.println("年龄最小:" + min);
    
        }
    }
    
    class Person {
        private String name;
        private int age;
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return this.name;
        }
    
        public int getAge() {
            return this.age;
        }
    
        @Override
        public String toString() {
            return this.name + " (" + this.age + ")";
        }
    
    }
    一个只会点点点的测试,有疑问可以在测试群(群号:330405140)问我
  • 相关阅读:
    python模块win32com中的early-bind与lazy-bind(以Autocad为例)
    Beautiful code and beautiful life
    PyPI 使用的国内源
    JavaScript在SublimeText中的配置
    Python中的模块包
    FTP 服务器在WIN10上的搭建及服务端下载文件实例
    Oracle ASM磁盘组兼容性
    oracle ADVM
    053-28
    053-27
  • 原文地址:https://www.cnblogs.com/yinwenbin/p/15475881.html
Copyright © 2011-2022 走看看