- Stream流的中间方法
名称 | 说明 |
Streamfilter(Predicatepredicate) | 过滤 |
Streamlimit(long maxSize) | 获取前几个元素 |
Streamskip(long n) | 跳过前几个元素 |
Streamdistinct() | 元素去重,依赖(hashCode和equals方法) |
static Streamconcat(Stream a,Stream b) | 合并a和b两个流为一个流 |
Streammap(Functionmapper) | 转换流中的数据类型 |
- 注意1:中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程
- 注意2:修改Stream流中的数据,不会影响原来集合或者数组中的数据
- 方法filter、limit及skip的使用示例:
import java.util.ArrayList;import java.util.Collections;import java.util.function.Predicate;public class StreamMiddle1 {public static void main(String[] args) {// 创建列表并添加元素ArrayList list = new ArrayList();Collections.addAll(list,"张无忌","周芷若","赵敏","张强","张三丰","张翠山","张良","王二麻子","谢广坤");// filter 过滤 把"张"开头的留下, 其余数据过滤不要list.stream().filter(new Predicate() {@Overridepublic boolean test(String s) {// test方法的返回值如果为true,表示当前数据留下// 如果返回值为false,表示当前数据舍弃不要boolean result = s.startsWith("张");return result;}}).forEach(s -> System.out.println(s));System.out.println("++++++++++++++++");// limit 获取前几个元素// 打印前三个元素list.stream().limit(3).forEach(s -> System.out.println(s));System.out.println("++++++++++++++++");// skip 跳过几个元素// 跳过前4个元素list.stream().skip(4).forEach(s -> System.out.println(s));System.out.println("++++++++++++++++");// 打印中间的三个名字list.stream().limit(6).skip(3).forEach(s -> System.out.println(s));}}
- 方法distinct和concat使用示例
import java.util.ArrayList;import java.util.Collections;import java.util.stream.Stream;public class StreamMiddle2 {public static void main(String[] args) {/** distinct 元素去重,依赖hashCode和equals方法* concat 合并a和b两个流为一个流*/ArrayList list1 = new ArrayList();Collections.addAll(list1,"张无忌","张无忌","张无忌","张强","张三丰","张翠山","张良","王二麻子","谢广坤");ArrayList list2 = new ArrayList();Collections.addAll(list2,"周芷若","赵敏");// 去重list1.stream().distinct().forEach(s -> System.out.println(s));System.out.println("+++++++++++++++");// 合并2个流,使用Stream.concat方法Stream.concat(list1.stream(), list2.stream()).forEach(s -> System.out.println(s));}}
- 方法map的使用示例
import java.util.ArrayList;import java.util.Collections;import java.util.function.Function;public class StreamMiddle3 {public static void main(String[] args) {/*map转换流中的数据类型注意1:中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程注意2:修改Stream流中的数据,不会影响原来集合或者数组中的数据*/ArrayList list =new ArrayList();Collections.addAll(list,"张无忌-15","周芷若-14","赵敏-13","张强-20","张三丰-100","张翠山-40","张良-35","王二麻子-37");//只获取里面的年龄并进行打印//String->int//第一个类型:流中原本的数据类型//第二个类型:要转成之后的类型//apply的形参s:依次表示流里面的每一个数据//返回值:表示转换之后的数据list.stream().map(new Function() {@Overridepublic Integer apply(String s) {String[] arr = s.split("-");String ageString = arr[1];int age = Integer.parseInt(ageString);return age;}}).forEach(s -> System.out.println(s));// 上面方法体可以改成lambda表达式形式,如下:list.stream().map(s -> Integer.parseInt(s.split("-")[1])).forEach(s -> System.out.println(s));}}
- Stream流的终结方法
名称 | 说明 |
void forEach(Consumer action) | 遍历 |
long count() | 统计 |
toArray() | 收集流中的数据,放到数组中 |
collect(Collector collector) | 收集流中的数据,放到集合中 |
示例代码如下:
import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.function.Consumer;import java.util.function.IntFunction;public class StreamDemo9 {public static void main(String[] args) {/*void forEach(Consumer action) 遍历long count() 统计toArray() 收集流中的数据,放到数组中*/// 创建数组ArrayList list =new ArrayList();// 添加元素Collections.addAll(list,"张无忌","周芷若","赵敏","张强","张三丰","张翠山","张良","王二麻子","谢广坤");// 遍历list.stream().forEach(new Consumer() {@Overridepublic void accept(String s) {System.out.println(s);}});System.out.println("++++++++++++++");// 统计long count = list.stream().count();System.out.println(count);System.out.println("++++++++++++++");// toArray数组:收集流中的数据,放到数组中///*Object[] array = list.stream().toArray();System.out.println(array);for (Object o : array) {System.out.println(o);}*/// IntFunction的泛型: 具体类型的数组// apply的形参:流中数据的个数,要跟数组的长度保持一致,把Object改成String// apply的返回值:具体类型的数组// 方法体:创建数组/*String[] arr = list.stream().toArray(new IntFunction() {@Overridepublic String[] apply(int value) {return new String[value];}});System.out.println(Arrays.toString(arr));*/// 或者也可以简写,如下:String[] arr2 = list.stream().toArray(value -> new String[value]);System.out.println(Arrays.toString(arr2));}}