什么是Stream流?
Stream(流)是一个来自数据源的元素队列,元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。数据源:流的来源,可以是集合,数组等
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。
优点
Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
Stream流
Stream的目的: 用于简化集合和数组操作的API
Stream流的思想核心: 流水线, 不是IO操作
Stream使用步骤:
- 得到集合/数组Stream流对象
- 把元素放上去(创建Stream对象)
- 调用Stream类相关API进行数据加工处理
Stream流的三类方法:
- 获取Stream流
创建一条流水线,并把数据放到流水线上准备进行操作 - 中间方法
流水线上的操作。一次操作完毕之后,还可以继续进行其他操作。 - 终结方法
一个Stream流只能有一个终结方法,是流水线上的最后一个操作
获取Stream流
- Collection集合得到Stream流
List<String> list1 = new ArrayList<>();
list1.add("abc");
list1.add("bbb");
list1.add("ccc");
list1.add("abc");
//得到Stream对象
Stream<String> stream = list1.stream();
//System.out.println(stream);
//Set集合
Set<String> set = new HashSet<>();
set.add("abc");
set.add("bbb");
set.add("ccc");
set.add("abc");
Stream<String> stream1 = set.stream();
//Map集合
Map<String,Integer> map = new HashMap<>();
map.put("abc",123);
map.put("bcd",345);
//得到key集合的stream
Stream<String> stream2 = map.keySet().stream();
//得到Entry的stream
Stream<Map.Entry<String, Integer>> stream3 = map.entrySet().stream();
2.数组得到Stream对象
- Stream.of() 得到
//数组的stream对象
Stream<Integer> stream4 = Stream.of(1, 2, 3, 4, 5, 6);
Integer[] arr = {2,4,6,8,10};
Stream<Integer> stream5 = Stream.of(arr);
Stream常用方法
Stream流的收集
public static <T> Collector<T, ?, List<T>> toList():转换为List集合
public static <T> Collector<T, ?, Set<T>> toSet() :转换为Set集合
List<String> list1 = new ArrayList<>();
list1.add("abc");
list1.add("bbb");
list1.add("ccc");
list1.add("abc");
//得到Stream对象
Stream<String> stream = list1.stream()
.distinct()//去重
.collect(Collectors.toList());
System.out.println(list);