Java之Stream流

Java之Stream流本文主要介绍了 Stream 流 包括集合和数组的 Stream 流创建方式 List 和 Set 集合直接使用 stream 方法创建 Map 集合间接使用 stream 方法创建 而数组使用 Stream 流的静态方法 of 创建

大家好,欢迎来到IT知识分享网。

本文主要介绍了Stream流,包括集合和数组的Stream流创建方式,List和Set集合直接使用stream()方法创建,Map集合间接使用stream()方法创建,而数组使用Stream流的静态方法of()创建,介绍了Stream流的中间操作,包括过滤filter(),限制limit()和跳过skip(),拼接concat)(),去重distinct(),排序sorted()等,最后介绍了Stream流的终结操作forEach()和count(),也给出Stream流的收集操作方法和综合练习。

目录

1、一个案例体验Stream流

2、Stream流的常见生成方式

3、Stream流的中间操作之filter

4、Stream流之中间操作limit与skip

5、Stream流中间操作之concat与distinct

6、Stream流之中间操作sorted

7、Stream之中间操作map与mapToInt

8、Stream流的常用终结操作符forEach与count

9、Stream流的收集操作(将流中数据收集到集合中)

10、Stream流综合练习


1、一个案例体验Stream流

import java.util.ArrayList; public class StreamDemo01 { public static void main(String[] args) { ArrayList<String> arrayList = new ArrayList<>() ; arrayList.add("张无忌") ; arrayList.add("张三"); arrayList.add("李四"); arrayList.add("张三丰"); arrayList.add("刘小明"); //找出姓张且名字为3个字的打印输出 arrayList.stream().filter(s->s.length()==3).filter(s->s.startsWith("张")).forEach(System.out::println); } } 

2、Stream流的常见生成方式

import java.util.*; import java.util.stream.Stream; public class StreamDemo02 { public static void main(String[] args) { //Collection体系的默认使用stream()方法生成流 List<String> list = new ArrayList<>() ; Stream<String> stream1 = list.stream() ; Set<String> set = new TreeSet<>() ; Stream<String> stream2 = list.stream() ; //Map集合使用间接的方式生成 Map<String,Integer> map = new HashMap<>() ; Stream<String> stream3 = map.keySet().stream() ; Stream<Integer> stream4 = map.values().stream() ; Stream<Map.Entry<String,Integer>> stream5 = map.entrySet().stream() ; //数组通过Stream的静态方法of()生成流 String [] arr = {"java","python","c++"} ; Stream<String> stream6 = Stream.of(arr) ; Stream<String> stream7 = Stream.of("java","python","c++") ; Stream<Integer> stream8 = Stream.of(10,20,30) ; } } 

3、Stream流的中间操作之filter

import java.util.ArrayList; import java.util.List; public class StreamDemo03 { public static void main(String[] args) { List<String> list = new ArrayList<>() ; list.add("张三"); list.add("张无忌") ; list.add("孙小美") ; list.add("王五") ; list.add("张三丰") ; //找出姓张的并输出 list.stream().filter(s->s.startsWith("张")).forEach(System.out::println); System.out.println("-------------"); //找出名字长度为3的输出 list.stream().filter(s->s.length()==3).forEach(s-> System.out.println(s)); System.out.println("-------------"); //找出姓张且名字长度为3的输出 list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(s-> System.out.println(s)); } } 

4、Stream流之中间操作limit与skip

import java.util.ArrayList; import java.util.List; public class StreamDemo04 { public static void main(String[] args) { List<String> list = new ArrayList<>() ; list.add("张三"); list.add("张无忌") ; list.add("孙小美") ; list.add("王五") ; list.add("张三丰") ; //取前面三个元素打印 list.stream().limit(3).forEach(System.out::println); System.out.println("-------------"); //跳过两个元素,打印剩下的 list.stream().skip(2).forEach(System.out::println); System.out.println("-------------"); //跳过2个元素,剩余元素中打印前2个 list.stream().skip(2).limit(2).forEach(s-> System.out.println(s)); } }

5、Stream流中间操作之concat与distinct

import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; public class StreamDemo05 { public static void main(String[] args) { List<String> list = new ArrayList<>() ; list.add("张三"); list.add("张无忌") ; list.add("孙小美") ; list.add("王五") ; list.add("张三丰") ; //取前面4个元素 Stream<String> s1 = list.stream().limit(4) ; //跳过两个元素 Stream<String> s2 = list.stream().skip(2) ; //合并 前面两个并输出 // Stream.concat(s1,s2).forEach(System.out::println); // System.out.println("-------------"); //合并前面两个,去重后输出 Stream.concat(s1,s2).distinct().forEach(s-> System.out.println(s)); } } 

6、Stream流之中间操作sorted

import java.util.ArrayList; import java.util.Comparator; public class StreamDemo06 { public static void main(String[] args) { ArrayList<String> arrayList = new ArrayList<>() ; arrayList.add("zhangsan") ; arrayList.add("lisi") ; arrayList.add("wangwu") ; arrayList.add("malu") ; arrayList.add("liaoxiang") ; arrayList.stream().sorted((s1,s2)->{ int num1 = s1.length() -s2.length() ; int num2 = num1==0 ? s1.compareTo(s2) : num1 ; return num2 ; }).forEach(System.out::println); System.out.println("----------------"); arrayList.stream().sorted(new Comparator<String>() { @Override public int compare(String s1, String s2) { int num1 = s1.length() -s2.length() ; int num2 = num1==0 ? s1.compareTo(s2) : num1 ; return num2 ; } }).forEach(s-> System.out.println(s)); } } 

7、Stream之中间操作map与mapToInt

import java.util.ArrayList; public class StreamDemo07 { public static void main(String[] args) { ArrayList<String> arrayList = new ArrayList<>() ; arrayList.add("10") ; arrayList.add("20") ; arrayList.add("30") ; //集合元素转换成整数后输出 arrayList.stream().map(s->Integer.parseInt(s)).forEach(System.out::println); //集合元素转换成整数求和输出 int sum = arrayList.stream().mapToInt(Integer::parseInt).sum() ; System.out.println(sum); } } 

8、Stream流的常用终结操作符forEach与count

import java.util.ArrayList; import java.util.List; public class StreamDemo08 { public static void main(String[] args) { List<String> list = new ArrayList<>() ; list.add("张三"); list.add("张无忌") ; list.add("孙小美") ; list.add("王五") ; list.add("张三丰") ; //统计集合中张开头的元素个数 long cnt = list.stream().filter(s->s.startsWith("张")).count() ; System.out.println(cnt); //输出集合元素 list.stream().forEach(System.out::println); } } 

9、Stream流的收集操作(将流中数据收集到集合中)

 import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; public class StreamDemo09 { public static void main(String[] args) { List<String> list = new ArrayList<>() ; list.add("张三") ; list.add("李四") ; list.add("王五子") ; Stream<String> stream1 = list.stream().filter(s->s.length()==2) ; List<String> list1 = stream1.collect(Collectors.toList()) ; //收集操作 for(String s : list1){ System.out.println(s); } System.out.println("---------------"); Set<Integer> set = new TreeSet<>() ; set.add(10) ; set.add(20) ; set.add(30) ; Stream<Integer> stream2 = set.stream().filter(s->s>=20) ; Set<Integer>set1 = stream2.collect(Collectors.toSet()) ; for(Integer i : set1){ System.out.println(i); } System.out.println("---------------"); String [] arr = {"张三,20","李四,19","王五,21"} ; //得到年龄大于等于20的流 Stream<String> stream3 = Stream.of(arr).filter(s->Integer.parseInt(s.split(",")[1])>=20) ; Map<String,Integer> map = stream3.collect(Collectors.toMap(s->s.split(",")[0],s->Integer.parseInt(s.split(",")[1]))) ; for(String key : map.keySet()){ System.out.println(key + ":" + map.get(key)); } } } 

10、Stream流综合练习

public class Actor { private String name ; public Actor(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 
import java.util.ArrayList; import java.util.stream.Stream; public class StreamDemo10 { public static void main(String[] args) { ArrayList<String> arrayList1 = new ArrayList<>() ; arrayList1.add("周伯通") ; arrayList1.add("杨过") ; arrayList1.add("郭靖") ; arrayList1.add("张无忌") ; arrayList1.add("张三丰") ; ArrayList<String> arrayList2 = new ArrayList<>() ; arrayList2.add("林龙女") ; arrayList2.add("林黛玉") ; arrayList2.add("林学苑") ; arrayList2.add("薛宝钗") ; arrayList2.add("林大美") ; //男的只要名字为三个字的 Stream<String> s1 = arrayList1.stream().filter(s->s.length()==3) ; //女的只要姓林的,并且不要第一个 Stream<String> s2 = arrayList2.stream().skip(1).filter(s->s.startsWith("林")) ; //过滤后的男女名字合并到一起 Stream<String> s3 = Stream.concat(s1,s2) ; //将上一步的操作作为构造方法的参数创建对象,遍历数据 s3.map(Actor::new).forEach(s-> System.out.println(s.getName())); } } 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/131257.html

(0)
上一篇 2025-08-09 14:33
下一篇 2025-08-09 14:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信