Stream流
作用:结合lambda表达式,简化集合和数组的操作
可以理解为是一种流水线作业,将集合或数组中的元素放到流水线(stream流)上,进行响应的处理后(使用链式编程可以更方便的处理),进行输出或其他操作
使用步骤:获取Stream流对象,使用中间方法处理数据,使用终结方法处理数据
获取Stream流对象的方法:
单列集合:collection中的默认方法stream
双列集合:不能直接获取(可以转化为单列集合后获取)
数组:Arrays工具类中的静态方法stream
零散数据(相同数据类型):Stream接口中的静态方法of
常见的方法:
中间方法:filter,limit,skip,distinct,concat,map
终结方法:forEach,count,collect,toArray
获取Stream流对象:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| ArrayList<String> list=new ArrayList<>(); Collections.addAll(list,"a","b","c","d","e");
Stream<String> stream1 = list.stream();
HashMap<String,Integer> hashMap=new HashMap<>(); hashMap.put("aaa",111); hashMap.put("bbb",222); hashMap.put("ccc",333); hashMap.put("ddd",444); hashMap.put("eee",555);
Stream<String> stream2 = hashMap.keySet().stream();
Stream<Map.Entry<String, Integer>> stream = hashMap.entrySet().stream();
int[] arr1={1,2,3,4,5,6};
String[] arr2={"a","b","c"}; IntStream stream = Arrays.stream(arr1); Stream<String> stream1 = Arrays.stream(arr2);
Stream.of(1,2,3,4,5); Stream.of("a","b","c");
|
中间方法
1.中间方法返回的是新的stream流,原来的stream流只能使用一次,因此建议使用链式编程
2.修改stream流中的数据,不会影响原来集合或数组中的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| list.stream().filter(s->过滤条件(满足条件留下));
list.stream().limit(int);
list.stream().skip(int);
list.stream().distinct();
Stream.concat(list1.stream(),list2.stream);
list.stream().map(s-> Integer.parseInt(s.split( regex: "-")[1]));
|
终结方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| list.stream().forEach(s->操作);
list.stream().count();
list.stream().toArray(value(元素个数)->new String[value]);
List<String> newList = list.stream( ) .filter(s ->“男”".equals(s.split( regex:"-"")[1])) .collect(collectors.toList()/toSet()); List<String> newList = list.stream( ) .filter(s ->“男”".equals(s.split( regex:"-"")[1])) .collect(collectors.toMap(键的生成规则,值的生成规则));
Map<String,Integer> map2 = list.stream() .filter(s ->"男".equals(s.split( "-")[1])) .collect(Collectors.toMap( s-> s.split("-")[1], s->Integer.parseInt(s.split("-")[2])));
|