Java教程

java串行流Stream

本文主要是介绍java串行流Stream,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
  • stream() − 为集合创建串行流。

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

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

两个基本特征

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 + ")";
    }

}

 

这篇关于java串行流Stream的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!