Stream流介绍
Stream 是数据渠道,用于操作数据元所生成的元素序列,它可以实现对集合的复杂操作,例如过滤、排序和映射等,Stream不会改变源对象,而是返回一个新的结果集。
Stream流的生成方式
- 生成流:通过数据源(集合、数组等)创建一个流
- 中间操作:一个流后面可以跟随另个或多个中间操作,其目的主要是打开流,做出某种程度的数据过滤
- 终结操作:一旦执行终止操作,就执行中间的链式操作,并产生结果。
Stream流的常见方法:
1.数据过滤
package Test0731;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class Test04 {
public static void main(String[] args) {
/**
* 1.创建Stream对象
* 2.操作Stream对象
* 3.结束Stream对象
*/
List<String> list = new ArrayList<>();
list.add("a");
list.add("mb");
list.add("cbc");
list.add("nbcd");
list.add("abcdse");
//多条件的and关系
List<String> newList = list.stream().filter(ele->ele.startsWith("a")).filter(ele->ele.endsWith("e")).collect(Collectors.toList());
newList.forEach(System.out::println);
//多条件的or关系
Predicate<String> predicate1 = ele -> ele.startsWith("c");
Predicate<String> predicate2 = ele -> ele.endsWith("e");
list.stream().filter(predicate1.or(predicate2)).collect(Collectors.toList()).forEach(System.out::println);
}
}
2.数量限制
package Test0731;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Test05 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("mb");
list.add("cbc");
list.add("nbcd");
list.add("abcdse");
list.stream().limit(2).collect(Collectors.toList()).forEach(System.out::println);
}
}
3.元素排序
package test0727.Test0731;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class Test06 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
//按照升序排序
list.stream().sorted().forEach(System.out::println);
System.out.println("-------------------");
list.stream().sorted(Comparator.naturalOrder()).forEach(System.out::println);
//按照降序排序
System.out.println("-------------------");
list.stream().sorted(Comparator.reverseOrder()).forEach(System.out::println);
}
}
Stream优缺点:
优点: 大大简化代码结构
缺点:调试不方便