JAVA - Stream 流
创始人
2024-01-31 07:31:36
0

这里写目录标题

    • 一、Stream 流
      • 1.1 Stream 流的过滤操作
      • 1.2 Stream 流的生成方式
      • 1.3 Stream 流的中间操作
      • 1.4 Stream 流中的常见中间操作方法
      • 1.5 Stream 流常见的终结操作方法
      • 1.6 Stream 流的收集操作

一、Stream 流

1.1 Stream 流的过滤操作

filter():返回由该流的元素组成的流,该元素与给定的谓词匹配;

  • filter()是一个中间操作,一般适用于list集合,主要作用就是模拟sql查询,从集合中查询想要的数据。

示例:

import java.util.ArrayList;public class StreamDemo {//要求打印出以'张'开头并且长度为三个字的名称public static void main(String[] args) {//初始化集合ArrayList list = new ArrayList<>();list.add("张三");list.add("李四");list.add("张五四");list.add("王四");list.add("张七五");//使用加强 for 遍历并判断for (String s : list) {if( s.startsWith("张") && s.length() == 3)System.out.println(s);}System.out.println("===========================");//使用 stream 中的 filter 方法对集合进行过滤输出list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(System.out::println);}
}

1.2 Stream 流的生成方式

Stream 的生成流

//通过数据源(集合,数组等)生成流import java.util.*;
import java.util.stream.Stream;public class StreamDemo2 {public static void main(String[] args) {//Collection 体系的集合可以使用默认方法 stream() 生成流List list = new ArrayList<>();Stream streamList = list.stream();Set set = new HashSet<>();Stream streamSet = set.stream();//Map 体系的集合间接的生成流Map map = new HashMap<>();Stream streamKey = map.keySet().stream();Stream streamValue = map.values().stream();Stream> streamEntry = map.entrySet().stream();//数组可以通过 Stream 的静态方法来生成流String[] strArray = new String[1024];Stream streamArray = Stream.of(strArray);}
}

1.3 Stream 流的中间操作

Stream 流的中间操作

//多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何的处理;list.stream().filter(/* 条件 */);//示例:
import java.util.ArrayList;public class StreamDemo3 {public static void main(String[] args) {ArrayList list = new ArrayList<>();list.add("张三");list.add("李四");list.add("张五四");list.add("王四");list.add("张七五");list.stream().filter(s -> s.startsWith("张")).forEach(System.out::println);}
}
  • 终结流:执行终止操作会从流的流水线上生成结果,其结果可以是任何不是流的值,例如List、String等;

1.4 Stream 流中的常见中间操作方法

  • Stream filter( Predicate predicate ):用于对流中的过滤操作;
  • Stream limit( long maxSize ):返回一个包含该流的元素流;
  • Stream skip( long num ):返回一个包含此流的其余部分丢弃的流的第( 1 或 n )元素后流;
import java.util.ArrayList;public class StreamDemo {public static void main(String[] args) {ArrayList 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(3).forEach(System.out::println);//取前三个数据,并跳过一个数据输出System.out.println("============================");list.stream().limit(3).skip(1).forEach(System.out::println);}
}
  • static Stream concat( Stream a, Stream b ):合并流;
  • Stream distinct():返回一个包含不同的元素流(根据Object.equals(Object))这个流;
import java.util.ArrayList;
import java.util.stream.Stream;public class StreamDemo5 {public static void main(String[] args) {ArrayList list = new ArrayList<>();list.add("张三");list.add("李四");list.add("张五四");list.add("王四");list.add("张七五");//s1截取前三个数据,s2跳过两个数据Stream s1 = list.stream().limit(3);Stream s2 = list.stream().skip(2);//合并流操作Stream.concat(s1,s2).forEach(System.out::println);System.out.println("======================");//因为 s1 和 s2 两个流已经执行过终结流,故需要重新赋值s1 = list.stream().limit(3);s2 = list.stream().skip(2);//合并流操作的同时将重复的数据去除Stream.concat(s1,s2).distinct().forEach(System.out::println);}
}
  • Stream sorted():返回由该流的元素组成的流,按自然顺序排序;
  • Stream sorted( Comparator comparator ):返回一个包含该流的元素流,根据提供的 Comparator 排序;
import java.util.ArrayList;public class StreamDemo {public static void main(String[] args) {ArrayList list = new ArrayList<>();list.add("ansan");list.add("lisi");list.add("zhangwusi");list.add("wangsi");list.add("zhangqiwu");//使用自然排序list.stream().sorted().forEach(System.out::println);System.out.println("======================");//使用比较器进行排序list.stream().sorted((s1,s2) -> {//根据长度比较int num = s1.length() - s2.length();//如果长度相等,则对比 ASCLL 码的差值int num2 = num == 0 ? s1.compareTo(s2) : num;//返回为正数表示前一个字符串排序优先级更低,负数则表示排序优先级更高,为零表示两个字符串相等return num2;}).forEach(System.out::println);}
}
  • Stream map( Function mapper ):返回一个流,包括将给定函数应用到该流元素的结果;
  • IntStream mapToInt( ToIntFunction mapper ):返回一个包含应用给定的功能,该流的元素的结果 IntStream ( 表示原始 int 流 );
import java.util.ArrayList;public class StreamDemo7 {public static void main(String[] args) {ArrayList list = new ArrayList<>();list.add("10");list.add("20");list.add("30");list.add("40");list.add("50");//使用 map() 将字符串数据转换为整数之后在控制台输出list.stream().map(Integer::parseInt).forEach(System.out::println);System.out.println("==========================================");//使用 mapToInt() 将字符串数组转换为整数后求和并返回System.out.println(list.stream().mapToInt(Integer::parseInt).sum());}
}

1.5 Stream 流常见的终结操作方法

Stream 流中的常见终结操作方法

  • void forEach( Consumer action ):对该流的每个元素执行一个动作;
  • long count():返回流中的元素数;
import java.util.ArrayList;public class StreamDemo1 {public static void main(String[] args) {ArrayList list = new ArrayList<>();list.add("张三");list.add("李四");list.add("张五四");list.add("王四");list.add("张七五");//输出流中的每一个数据list.stream().forEach(System.out::println);//输出流中的数据个数System.out.println(list.stream().count());}
}

1.6 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集合中;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class StreamDemo8 {public static void main(String[] args) {String[] strArrays = {"张三","李四","王五","赵六"};//使用 List 收集流List listStream = Stream.of(strArrays).collect(Collectors.toList());System.out.println(listStream);System.out.println("===================================");//使用 Set 收集流Set setStream = Stream.of(strArrays).collect(Collectors.toSet());System.out.println(setStream);System.out.println("===================================");//使用 Map 收集流,以数组的下标作为键值Map mapStream = Stream.of(strArrays).collect(Collectors.toMap(s -> Arrays.binarySearch(strArrays,s) ,s -> s));System.out.println(mapStream);}
}

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...