1.本文章简介了Stream是jdk1.8的新特性,方便操作集合,简化代码的API。
2.Stream可以由数组或集合创建,对流的操作分为两种。
(1)中间操作:每次放回一个新的流,可以有多个。
(2)终端操作:每个流只能进行一次终端操作,终端操作结束后流无法再次使用.终端操作会产生一个新的集合或值.
3.代码示例:
package com.xzz.Stream;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @ClassName StreamApi
* @Date 20220425
* @Author lcl-xiezezhong
* @Version 1.0
*/
public class StreamApi {
public static void main(String[] args) {
initList();
}
private static void initList() {
//首先创建一个List集合
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("张三");
arrayList.add("李四");
arrayList.add("王五");
arrayList.add("赵六");
arrayList.add("赵六");
//看看list里面的数据是什么样的
System.out.println("=========开始========");
for (String lists : arrayList){
System.out.println(lists);
}
System.out.println("=========结束========");
/**
* 1.流的常用创建方法(两种)
* 使用Collection下的stream 顺序流
* 使用Collection下的parallelStream 并行流
*/
Stream<String> stream = arrayList.stream();
Stream<String> stringStream = arrayList.parallelStream();
/**
* list集合去重
* 使用Stream中的方法disinct去除
* (1):collect 收集流
* (2):Collectors.toList() 将流转为集合
* (3):Collectors.toSet() 将流转为hashset
* Collectors 里面很多方法
*/
/********************中间操作***********************/
System.out.println("========去重开始=====");
List<String> collect
=arrayList.stream().distinct().collect(Collectors.toList());
System.out.println(collect);
System.out.println("========去重结束=====");
/**
* List 找出包含王的数据 两种方法
* (1)使用集合遍历
* (2)使用使用Stream中的方法filter
* stream().filter()来过滤一个List对象,查找符合条件的对象集合
*/
System.out.println("========包含开始=====");
List<String> wang = arrayList.stream().filter(s ->
s.contains("王")).collect(Collectors.toList());
System.out.println(wang);
System.out.println("========包含结束=====");
//使用集合遍历
System.out.println("========集合包含=====");
for (String wang1 : arrayList){
if(wang1.contains("王")){
System.out.println(wang1);
}
}
System.out.println("========集合结束=====");
/**
* 使用使用Stream中的方法limit
* 截取2前面的数据
*
*/
System.out.println("======limit截取=====");
List<String> collect1 = arrayList.stream().limit(2).collect(Collectors.toList());
System.out.println(collect1);
System.out.println("======limit结束=====");
/**
* 使用使用Stream中的方法skip
* 2后面的数据
*
*/
System.out.println("======skip截取=====");
List<String> collect2 = arrayList.stream().skip(2).collect(Collectors.toList());
System.out.println(collect2);
System.out.println("======skip结束=====");
System.out.println("======map拼接=====");
/**
* map对流中的元素就行统一处理
*/
List<String> collect3 = arrayList.stream().map(s -> s.concat("***")).collect(Collectors.toList());
System.out.println(collect3);
System.out.println("======map结束=====");
/********************终端操作符***********************/
/**
* 集合中是否有一个元素满足条件
* 满足 true
* 不满足 false
*/
boolean anyMatch = arrayList.stream().anyMatch(s -> s.contains("李四"));
System.out.println("是否有一个元素满足条件:"+anyMatch);
/**
* 集合中所有元素都满足条件
*/
boolean allMatch = arrayList.stream().allMatch(s -> s.length() > 0);
System.out.println("集合中所有元素都满足条件:"+allMatch);
/**
* 集合中所有元素都不满足条件
*/
boolean noneMatch = arrayList.stream().noneMatch(s -> s.length() >= 2);
System.out.println("集合中所有元素都满足条件:"+noneMatch);
/**
* 返回集合中任意元素
*/
Optional<String> any = arrayList.stream().findAny();
System.out.println("返回集合任意元素串行: "+any);
for (int i = 0; i < arrayList.size() ; i++) {
Optional<String> any1 = arrayList.parallelStream().findAny();
System.out.println("返回集合任意元素并行: "+any1);
}
/**
* 返回集合第一个元素
*/
Optional<String> first = arrayList.stream().findFirst();
System.out.println("返回集合中第一个元素: "+first);
/**
* 循环
*/
arrayList.stream().forEach(s -> System.out.println("循环输出: "+s));
/**
* 将流中结果反复计算得到一个结果
*/
Optional<String> reduce = arrayList.stream().reduce((b, d) -> {
return b + d;
});
System.out.println("累加的结果: "+reduce.get());
/**
* 集合中元素的个数
*/
long count = arrayList.stream().count();
System.out.println("集合中元素的个数: "+count);
}
}