【重学Java】Stream流 (2)

filter代码演示

public class StreamDemo01 { public static void main(String[] args) { //创建一个集合,存储多个字符串元素 ArrayList<String> list = new ArrayList<String>(); list.add("林青霞"); list.add("张曼玉"); list.add("王祖贤"); list.add("柳岩"); list.add("张敏"); list.add("张无忌"); //需求1:把list集合中以张开头的元素在控制台输出 list.stream().filter(s -> s.startsWith("张")).forEach(System.out::println); System.out.println("--------"); //需求2:把list集合中长度为3的元素在控制台输出 list.stream().filter(s -> s.length() == 3).forEach(System.out::println); System.out.println("--------"); //需求3:把list集合中以张开头的,长度为3的元素在控制台输出 list.stream().filter(s -> s.startsWith("张")).filter(s -> s.length() == 3).forEach(System.out::println); } }

limit&skip代码演示

public class StreamDemo02 { public static void main(String[] args) { //创建一个集合,存储多个字符串元素 ArrayList<String> list = new ArrayList<String>(); list.add("林青霞"); list.add("张曼玉"); list.add("王祖贤"); list.add("柳岩"); list.add("张敏"); list.add("张无忌"); //需求1:取前3个数据在控制台输出 list.stream().limit(3).forEach(System.out::println); System.out.println("--------"); //需求2:跳过3个元素,把剩下的元素在控制台输出 list.stream().skip(3).forEach(System.out::println); System.out.println("--------"); //需求3:跳过2个元素,把剩下的元素中前2个在控制台输出 list.stream().skip(2).limit(2).forEach(System.out::println); } }

concat&distinct代码演示

public class StreamDemo03 { public static void main(String[] args) { //创建一个集合,存储多个字符串元素 ArrayList<String> list = new ArrayList<String>(); list.add("林青霞"); list.add("张曼玉"); list.add("王祖贤"); list.add("柳岩"); list.add("张敏"); list.add("张无忌"); //需求1:取前4个数据组成一个流 Stream<String> s1 = list.stream().limit(4); //需求2:跳过2个数据组成一个流 Stream<String> s2 = list.stream().skip(2); //需求3:合并需求1和需求2得到的流,并把结果在控制台输出 // Stream.concat(s1,s2).forEach(System.out::println); //需求4:合并需求1和需求2得到的流,并把结果在控制台输出,要求字符串元素不能重复 Stream.concat(s1,s2).distinct().forEach(System.out::println); } }

Stream流终结操作方法【应用】

概念

终结操作的意思是,执行完此方法之后,Stream流将不能再执行其他操作

常见方法

方法名 说明
void forEach(Consumer action)   获取流的每个元素并对其执行操作  
long count()   返回此流中的元素数  

代码演示

public class StreamDemo { public static void main(String[] args) { //创建一个集合,存储多个字符串元素 ArrayList<String> list = new ArrayList<String>(); list.add("林青霞"); list.add("张曼玉"); list.add("王祖贤"); list.add("柳岩"); list.add("张敏"); list.add("张无忌"); //需求1:把集合中的元素在控制台输出 //list.stream().forEach(System.out::println); //list.stream().forEach(new Consumer() { // @Override // public void accept(Object o) { // // } // }); //在forEach方法底层会循环调用流中每一个数据 //并循环调用accept方法,把每一个数据传递给accept方法 //s就依次代表流中的每一个数据 //所以只需要在accept方法中编写相应的业务逻辑即可 //需求2:统计集合中有几个以张开头的元素,并把统计结果在控制台输出 long count = list.stream().filter(s -> s.startsWith("张")).count(); System.out.println(count); } }

Stream流的收集操作【应用】

概念

对数据使用Stream流的方式操作完毕后,可以把流中的数据收集到集合中

常用方法

方法名 说明
R collect(Collector collector)   把结果收集到集合中  

工具类Collectors提供了具体的收集方式

方法名 说明
public static Collector toList()   把元素收集到List集合中  
public static Collector toSet()   把元素收集到Set集合中  
public static Collector toMap(Function keyMapper,Function valueMapper)   把元素收集到Map集合中  

代码演示

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyspwj.html