概述
Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。
特点:
1.不是数据结构,不会保存数据。
2.不会修改原来的数据源,它会将操作后的数据保存到另外一个对象中。
3.惰性求值,流在中间处理过程中,只是对操作进行了记录,并不会立即执行,需要等到执行终止操作的时候才会进行实际的计算。
分类
无状态:指元素的处理不受之前元素的影响;
有状态:指该操作只有拿到所有元素之后才能继续下去。
非短路操作:指必须处理所有元素才能得到最终结果;
短路操作:指遇到某些符合条件的元素就可以得到最终结果,如 A || B,只要A为true,则无需判断B的结果。
具体使用
这里只对自己常用的进行介绍,后续用上其它的再回来进行补充。
数组转list
String[] arr = {“a”, “b”, “c”};
List list = Stream.of(arr).collect(Collectors.toList());
list转,分隔字符串
public static <T> String parseListToStr3(List<T> list){
String result = list.stream().map(String::valueOf).collect(Collectors.joining(","));
return result;
}
检查list集合中是否存在某个值
public static void main(String[] args) {
People p1 = new People("b", "b");
People p2 = new People("a", "b11");
List<People> list = new ArrayList<>();
list.add(p1);
list.add(p2);
boolean bool = list.stream().filter(a -> a.getName().equals("a") || a.getNick().equals("a")).findAny().isPresent();
System.out.println(bool);
List<People> data = list.stream().filter(a -> a.getName().equals("a") || a.getNick().equals("a")).collect(Collectors.toList());
if(data != null && data.size() > 0) {
for(int i=0; i<data.size(); i++) {
System.out.println(data.get(i).getName() + "---" + data.get(i).getNick());
}
}
}
获取list<对象>里面的数据组织成Map
Map<String, String> map = list.stream().collect(Collectors.toMap(User::getName, User::getSex));