Stream接口
Posted 技术很low的瓜贼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Stream接口相关的知识,希望对你有一定的参考价值。
文章目录
Stream接口
一、概念
- java.util.stream.Stream接口是对集合功能的增强,可以对集合元素进行复杂的查找、过滤、筛选等操作
- Stream接口借助于Lambda 表达式极大的提高编程效率和程序可读性,同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势
二、创建方式
- 方式一:通过调用集合的默认方法来获取流
- 方式二:通过数组工具类中的静态方法来获取流
- 方式三:通过Stream接口的静态方法来获取流
- 方式四:通过Stream接口的静态方法来获取流
三、中间操作
方法 | 功能 |
---|
Stream filter(Predicate<? super T> predicate) | 返回一个包含匹配元素的流 |
Stream distinct() | 返回不包含重复元素的流 |
Stream limit(long maxSize) | 返回不超过给定元素数量的流 |
Stream skip(long n) | 返回丢弃前n个元素后的流 |
方法 | 功能 |
---|
Stream map(Function<? super T,? extends R>mapper) | 返回每个处理过元素组成的流 |
Stream flatMap(Function<? super T,? extends Stream<? extends R>> mapper) | 返回每个被替换过元素组成的流,并将所有流合成一个流 |
方法 | 功能 |
---|
Stream sorted() | 返回经过自然排序后元素组成的流 |
Stream sorted(Comparator<? super T> comparator) | 返回经过比较器排序后元素组成的流 |
四、终止操作
方法 | 功能 |
---|
Optional findFirst() | 返回该流的第一个元素 |
boolean allMatch(Predicate<? super T> predicate) | 返回所有元素是否匹配 |
boolean noneMatch(Predicate<? super T> predicate) | 返回没有元素是否匹配 |
Optional max(Comparator<? super T> comparator) | 根据比较器返回最大元素 |
Optional min(Comparator<? super T> comparator) | 根据比较器返回最小元素 |
long count() | 返回元素的个数 |
void forEach(Consumer<? super T> action) | 对流中每个元素执行操作 |
方法 | 功能 |
---|
Optional reduce(BinaryOperator accumulator) | 返回结合后的元素值 |
方法 | 功能 |
---|
<R,A> R collect(Collector<? super T,A,R> collector) | 使用收集器对元素进行处理 |
五、实现代码
public class Person implements Comparable<Person>
private String name;
private int age;
public Person()
@Override
public boolean equals(Object o)
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
@Override
public int hashCode()
return Objects.hash(name, age);
public Person(String name, int age)
this.name = name;
this.age = age;
public void show()
System.out.println("方法引用案例");
@Override
public String toString()
return "Person" +
"name='" + name + '\\'' +
", 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;
@Override
public int compareTo(Person o)
return getAge() - o.getAge();
public class StreamTest
public static void test1()
List<Person> list1 = new ArrayList();
list1.add(new Person("zhangsan", 21));
list1.add(new Person("lisi", 25));
list1.add(new Person("wangwu", 16));
list1.add(new Person("zhaoliu", 21));
list1.add(new Person("sunqi", 17));
List<Person> list2 = new ArrayList<>();
for (Person person : list1)
if (person.getAge() > 18)
list2.add(person);
for (Person person : list2)
System.out.println(person);
public static void test2()
List<Person> list1 = new ArrayList();
list1.add(new Person("zhangsan", 21));
list1.add(new Person("lisi", 25));
list1.add(new Person("wangwu", 16));
list1.add(new Person("zhaoliu", 21));
list1.add(new Person("sunqi", 17));
list1.stream().filter(new Predicate<Person>()
@Override
public boolean test(Person person)
return person.getAge() > 18;
).forEach(new Consumer<Person>()
@Override
public void accept(Person person)
System.out.println(person);
);
list1.stream().filter(person -> person.getAge() > 18).forEach(person -> System.out.println(person));
list1.stream().filter(person -> person.getAge() > 18).forEach(System.out::println);
public static void test3()
List<Person> list1 = new ArrayList();
list1.add(new Person("zhangsan", 21));
list1.add(new Person("lisi", 25));
list1.add(new Person("wangwu", 16));
list1.add(new Person("zhaoliu", 21));
list1.add(new Person("sunqi", 17));
list1.add(new Person("sunqi", 17));
list1.stream().distinct().forEach(new Consumer<Person>()
@Override
public void accept(Person person)
System.out.println(person);
);
list1.stream().distinct().forEach(person -> System.out.println(person));
list1.stream().distinct().forEach(System.out::println);
public static void test4()
List<Person> list1 = new ArrayList();
list1.add(new Person("zhangsan", 21));
list1.add(new Person("lisi", 25));
list1.add(new Person("wangwu", 16));
list1.add(new Person("zhaoliu", 21));
list1.add(new Person("sunqi", 17));
list1.stream().limit(3).forEach(new Consumer<Person>()
@Override
public void accept(Person person)
System.out.println(person);
);
list1.stream().limit(3).forEach(person -> System.out.println(person));
list1.stream().limit(3).forEach(System.out::println);
public static void test5()
List<Person> list1 = new ArrayList();
list1.add(new Person("zhangsan", 21));
list1.add(new Person("lisi", 25));
list1.add(new Person("wangwu", 16));
list1.add(new Person("zhaoliu", 21));
list1.add(new Person("sunqi", 17));
list1.stream().skip(2).forEach(new Consumer<Person>()
@Override
public void accept(Person person)
System.out.println(person);
);
list1.stream().skip(2).forEach(person -> System.out.println(person));
list1.stream().skip(2).forEach(System.out::println);
public static void test6()
List<Person> list1 = new ArrayList();
list1.add(new Person("zhangsan", 21));
list1.add(new Person("lisi", 25));
list1.add(new Person("wangwu", 16));
list1.add(new Person("zhaoliu", 21));
list1.add(new Person("sunqi", 17));
list1.stream().map(new Function<Person, Object>()
@Override
public Object apply(Person person)
return person.getName();
).forEach(new Consumer<Object>()
@Override
public void accept(Object o)
System.out.println(o);
);
list1.stream().map(person -> person.getName()).forEach(o -> System.out.println(o));
list1.stream().map(Person::getName).forEach(System.out::println);
public static void test7()
List<Person> list1 = new ArrayList();
list1.add(new Person("zhangsan", 21));
list1.add(new Person("lisi", 25));
list1.add(new Person("wangwu", 16));
list1.add(new Person("zhaoliu", 21));
list1.add(new Person("sunqi", 17));
list1.stream().sorted().forEach(new Consumer<Person>()
@Override
public void accept(Person person)
System.out.println(person);
);
list1.stream().sorted().forEach(person -> System.out.println(person));
list1.stream().sorted().forEach(System.out::println);
public static void test8()
List<Person> list1 = new ArrayList();
list1.add(new Person("zhangsan", 21));以上是关于Stream接口的主要内容,如果未能解决你的问题,请参考以下文章
Stream流
java中的Stream流
Java Stream流式思想
Java基础-Stream流方法引用篇
Java8 Stream介绍
Java8 Stream介绍