qaq
作用
- 结合lambda表达式,简化集合、数组的操作
使用步骤
- 获取Stream流对象
- 使用中间方法处理数据
- 使用终结方法处理数据
获取方式
- 单列集合:
Collection
中的默认方法:default Stream<E> stream()
- 双列集合:不可以
- 数组:
Arrays
工具类中的静态方法:public static <T> Stream<T> stream(T[] array)
- 一堆零散数据:
Stream
接口中的静态方法:public static <T> Stream<T> of(T... values)
int[] arr1 = {1,2,3,4};
String[] arr2 = {"a","b","c"};
Arrays.stream(arr1).forEach(s -> System.out.println(s));
Arrays.stream(arr2).forEach(s -> System.out.println(s));
.of(1,2,3,4,5).forEach(s -> System.out.println(s));
Stream
//需要注意:
//Stream接口中静态方法of的细节
//方法的形参是一个可变参数,可以传零散数据,也可以传数组
//传数组就必须传引用数据类型的数组,若传基本数据类型,则会把数组当做一个元素
.of(arr1).forEach(s -> System.out.println(s));//打印数组地址 Stream
中间方法
Stream<T> filter(Predicate<? super T>predicate)
:过滤Stream<T> limit(long maxSize)
:获取前几个元素Stream<T> skip(long n)
:跳过前几个元素Stream<T> distinct()
:元素去重,依赖(hashCode和equals方法),底层用的HashSetstatic <T> Stream<T> concat(Stream a, Stream b)
:合并a和b两个流为一个流Stream<R> map(Function<T, R> mapper)
:转换流中的数据类型
注意 :会返回新的Stream流,原来的Stream流只能使用一次
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c");
.stream().filter(s -> s.startWith("a")).
listforEach(s -> System.out.println(s));
终结方法
void forEach(Consumer action)
:遍历long count()
:统计toArray()
:把流中数据收集到数组中collect(Collector collector)
:把流中数据收到集合中
String[] arr = list.stream().toArray(value -> new String[value]);//value是流中数据的个数
List<String> newList = list.stream().filter(s -> "男".equals(s.split("-")[1])).collect(Collectors.toList());
Set<String> newSet = list.stream().filter(s -> "男".equals(s.split("-")[1])).collect(Collectors.toSet());
//如果把数据收集到Map中,键不能重复,否则报错
示例代码
ArrayList<Integer> list = new ArrayList<>();
Collections.addAll(list, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> newList = list.stream()
.filter(s -> s%2 == 0)
.collect(Collectors.toList());
System.out.println(newList);
ArrayList<String> list = new ArrayList<>();
.add("zhangsan,23");
list.add("lisi,24");
list.add("wangwu,25");
list
Map<String, Integer> mp = list.stream()
.filter(s -> Integer.parseInt(s.split(",")[1]) >= 24)
.collect(Collectors.toMap(s -> s.split(",")[0], s -> Integer.parseInt(s.split(",")[1])));
System.out.println(mp);