Java stream流的中间操作

  • Post author:
  • Post category:java


多个流的中间操作可连成一个流水线,除非流水线上触发终端操作,否则中间操作不会执行任何的处理!而在终止操作执行时一次性全部处理.将这种处理方式称为”惰性求值”

下面我们分三个部分来介绍流的中间操作

1.筛片与切片

筛选与切片中共涉及一下几个方法

  • filter() //过渡,从流中排除某些元素

  • limit() //截断流,使之不超过指定数量

  • distinct() //筛选,通过流所生成元素的hashCode()和equals()方法去除重复元素

  • skip() //跳过指定数量的元素

下面我们进行代码示例:

package stream流;
​
import java.util.ArrayList;
​
public class StreamDemo3 {
​
    public static void main(String[] args) {
​
        ArrayList<Integer> list = new ArrayList();
              list.add(1);
              list.add(5);
              list.add(4);
              list.add(9);
              list.add(5);
              list.add(3);
              list.add(2);
        list.stream()
             .filter((e)->{ return e>3;})
             .distinct()
             .limit(3)
             .skip(1)
             .forEach((e)-> System.out.println(e));
​
    }
}

这里我们通过一系列流的中间操作,最终输出的结果为:

4
9

2.映射

  • 此处映射就类似于高中函数中所学习的映射,即具有一一对应的关系

此处共涉及到两个方法,下面来逐一说明

①map();

//此方法为接收一个函数作为参数,将元素转换成其他形式或提取信息,该函数会被应用到每个元素上,并将其映射成为一个新的元素

这里我们先自定义一个类

package stream流;
​
class Apple {
​
    private int num;
    private String color;
    private String price;
​
    public Apple(int num, String color, String price) {
        this.num = num;
        this.color = color;
        this.price = price;
    }
​
    public int getNum() {
        return num;
    }
​
    public void setNum(int num) {
        this.num = num;
    }
​
    public String getColor() {
        return color;
    }
​
    public void setColor(String color) {
        this.color = color;
    }
​
    public String getPrice() {
        return price;
    }
​
    public void setPrice(String price) {
        this.price = price;
    }
​
    @Override
    public String toString() {
        return "Apple{" +
                "num=" + num +
                ", color='" + color + '\'' +
                ", price='" + price + '\'' +
                '}';
    }
}
​
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
​
public class StreamDemo4 {
​
    public static void main(String[] args) {
​
        Apple apple1 = new Apple(100,"白色","8900");
        Apple apple2 = new Apple(101,"黑色","9900");
        Apple apple3 = new Apple(102,"白色","8500");
        Apple apple4 = new Apple(103,"蓝色","8900");
        Apple apple5 = new Apple(104,"白色","9200");
​
        List<Apple> apples = new ArrayList<>();
              apples.add(apple1);
              apples.add(apple2);
              apples.add(apple3);
              apples.add(apple4);
              apples.add(apple5);
​
        //map();  将其映射为一个新的元素
                apples.stream()
                      .filter(e->{return e.getColor().equals("白色");})
                      .map(Apple::getPrice)
                      .forEach(e-> System.out.println(e));
​
    }
}

这里我们首先使用filter()方法筛选出部分元素,再通过map方法,将其映射为一个新的元素

3.排序

因为排序通常涉及到自然排序与选择排序,因此此处也有两个排序方法

  • sorted()

    //自然排序

    package stream流;
    ​
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    ​
    public class SortTest {
    ​
        public static void main(String[] args) {
    ​
            //自然排序
            List<Integer> list = Arrays.asList(21,42,35,2,15,99,85);
            list.stream()
                    .sorted()
                    .forEach(System.out::println);
            
        }
    }
    ​

  • sorted() //定制排序

    package stream流;
    ​
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    ​
    public class SortTest {
    ​
        public static void main(String[] args) {
            
            //定制排序
            List<Employee> employees = EmployeeDate.getEmployees();
            employees.stream()
                    .sorted()
                    .forEach(System.out::println);
            
        }
    }
    ​



版权声明:本文为weixin_52629592原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。