stream流的详细操作
文章目录
-
- 一、Stream概述
- 二、Stream的创建
- 三、Stream的操作符
-
- 中间操作符
-
-
- 1.filter
- 2.distinct
- 3.limit
- 4.skip
- 5.map
- 6.flatmap
- 7.sorted
-
- 终止操作符
-
-
- 1.anyMatch
- 2.allMatch
- 3.noneMatch
- 4.findAny
- 5.findFirst
- 6.forEach
- 7.collect
- 8.reduce
- 9.count
-
- `重要`
一、Stream概述
Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda ,给我们操作集合(Collection)提供了极大的便利。
那么什么是Stream?
Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。
二、Stream的创建
list.stream() //转换成流进行操作
三、Stream的操作符
stream的操作符可以分为两种:中间操作符和终止操作符
中间操作符
1.filter
/ * 用于过滤不满足条件的元素 */ @Test public void filter(){ List<String> list = Arrays.asList("abc","sd","as","few","wth","dfg"); List<String> filtered = list.stream().filter(str -> str.contains("a")).collect(Collectors.toList()); System.out.println(filtered); }
2.distinct
/ * 用于去掉重复的元素 */ @Test public void distinct(){ List<String> list = Arrays.asList("abc","sd","as","few","wth","dfg","as"); List<String> distincted = list.stream().distinct().collect(Collectors.toList()); System.out.println(distincted); }
3.limit
/ * 用于获取前n个元素 */ @Test public void limit(){ List<String> list = Arrays.asList("abc","sd","as","few","wth","dfg","as"); List<String> limited = list.stream().limit(3).collect(Collectors.toList()); System.out.println(limited); }
4.skip
/ * 用于获取除前n个元素以外的所有元素 */ @Test public void skip(){ List<String> list = Arrays.asList("abc","sd","as","few","wth","dfg","as"); List<String> skiped = list.stream().skip(3).collect(Collectors.toList()); System.out.println(skiped); }
5.map
/ * 用于对所有元素进行集体的操作 */ @Test public void map(){ List<String> list = Arrays.asList("abc","sd","as","few","wth","dfg","as"); List<String> mapped = list.stream().map(str->"han Shen_"+str).collect(Collectors.toList()); System.out.println(mapped); }
6.flatmap
/ * 用于对所有元素进行扁平化的操作 */ @Test public void flatMap(){ List<String> list = Arrays.asList("abc","sd","as","few","wth","dfg","as"); List<Character> flatMaped = list.stream().flatMap(str -> javaStream.getCharacter(str)).collect(Collectors.toList()); System.out.println(flatMaped); } //创建了一个字符流转换的方法 public static Stream<Character> getCharacter(String str){ ArrayList<Character> list = new ArrayList<>(); for (Character character : str.toCharArray()) { list.add(character); } return list.stream(); }
map和flatmap的区别:
7.sorted
/ * 用于对所有元素进行以a到z顺序进行排序 */ @Test public void sorted(){ //---------------------------字母排序------------------------------------- List<String> list = Arrays.asList("abc","sd","as","few","wth","dfg","as"); List<String> sorted = list.stream().sorted().collect(Collectors.toList());//正序 List<String> collect1 = list.stream().sorted(Collections.reverseOrder(Collator.getInstance(Locale.US))).collect(Collectors.toList()); System.out.println(sorted); System.out.println(collect1); //---------------------------汉字排序------------------------------------- List<String> list3 = Arrays.asList("吕布","刘备","阿斗","赵云","张辽","马超","法正"); List<String> sorted1 = list3.stream().sorted(Collator.getInstance(Locale.CHINA)).collect(Collectors.toList());//正序 List<String> collect2 = list3.stream().sorted(Collections.reverseOrder(Collator.getInstance(Locale.CHINA))).collect(Collectors.toList()); System.out.println(sorted1); System.out.println(collect2); //---------------------------数字排序------------------------------------- List<Integer> list1 = Arrays.asList(1,5,9,54,33,-52,54); List<Integer> collect = list1.stream().sorted().collect(Collectors.toList());//正序 Stream<Integer> sorted2 = list1.stream().sorted(Collections.reverseOrder());//反序 System.out.println(collect); sorted2.forEach(s-> System.out.print(s+",")); }
终止操作符
1.anyMatch
/ * 用于判断集合中是否有一个元素满足条件 */ @Test public void anyMatch(){ List<String> list = Arrays.asList("abc","sd","as","few","wth","dfg","as"); boolean a = list.stream().anyMatch(s -> s.contains("a")); System.out.println(a); }
2.allMatch
/ * 用于判断集合中是否所有元素都满足条件 */ @Test public void allMatch(){ List<String> list = Arrays.asList("abc","sd","as","few","wth","dfg","as"); boolean a = list.stream().allMatch(s -> s.contains("a")); System.out.println(a); }
3.noneMatch
/ * 用于判断集合中是否所有元素都不满足条件 */ @Test public void noneMatch(){ List<String> list = Arrays.asList("abc","sd","as","few","wth","dfg","as"); boolean a = list.stream().noneMatch(s -> s.length()>4); System.out.println(a); }
4.findAny
/ * 用于返回集合中的任意元素 */ @Test public void findAny(){ List<String> list = Arrays.asList("abc","sd","as","few","wth","dfg","as"); for (int i=0;i<1000;i++){ Optional<String> any = list.parallelStream().findAny(); if (any.isPresent()) System.out.println(any.get()); } }
5.findFirst
/ * 用于返回集合中的第一个元素 */ @Test public void findFirst(){ List<String> list = Arrays.asList("abc","sd","as","few","wth","dfg","as"); Optional<String> first = list.stream().findFirst(); if (first.isPresent()) System.out.println(first.get()); }
6.forEach
/ * 用于循环 */ @Test public void forEach(){ List<String> list = Arrays.asList("abc","sd","as","few","wth","dfg","as"); list.stream().forEach(s -> System.out.println(s)); }
7.collect
/ * 用于将流转换成其他类型的数据:list,map,set */ @Test public void collect(){ List<String> list = Arrays.asList("abc","sd","as","few","wth","dfg","as"); Set<String> collect = list.stream().collect(Collectors.toSet()); System.out.println(collect); //------------------------------------------------------------------- Map<String, Object> collect1 = list.stream().collect(Collectors.toMap(v -> "han_" + v, v -> v,(oldvalue, newvalue)->newvalue)); System.out.println(collect1); }
8.reduce
/ * 将流中的元素反复的结合起来得到一个结果 */ @Test public void reduce(){ List<String> list = Arrays.asList("abc","sd","as","few","wth","dfg","as"); Optional<String> reduce = list.stream().reduce((acc,item) -> {return (acc+item).replace("s","h");}); if(reduce.isPresent()) System.out.println(reduce.get()); }
9.count
/ * 获取集合中元素的数量 */ @Test public void count(){ List<String> list = Arrays.asList("abc","sd","as","few","wth","dfg","as"); long count = list.stream().count(); System.out.println(count); }
重要
isPresent();
为了判断查询的类对象是否存在,采用此方法
.isPresent()一般与.get()方法合用,当optional中存在course时,optional.isPresent()值为true,通过get()方法返回对象。
创作打卡挑战赛
赢取流量/现金/CSDN周边激励大奖