Stream流用法示例-创新互联
StreamApi是jdk1.8所提供的新特性,基于lambda表达式,对数据流的一系列操作。数据源可以来自很多地方,可以是数组、集合也可以是文件等等。对于Stream它包含两个操作,中间操作和终止操作,终止操作出现之前是不会进行中间操作的,也就是说想要使用StreamAPI就必须要有一个终止操作,否者代码将不执行。
成都创新互联主要为客户提供服务项目涵盖了网页视觉设计、VI标志设计、营销型网站建设、网站程序开发、HTML5响应式重庆网站建设公司、移动网站建设、微商城、网站托管及成都网站维护公司、WEB系统开发、域名注册、国内外服务器租用、视频、平面设计、SEO优化排名。设计、前端、后端三个建站步骤的完善服务体系。一人跟踪测试的建站服务标准。已经为成都阳光房行业客户提供了网站制作服务。- 创建Stream
- 通过StreamAPI静态工厂创建
Stream
stream = Stream.of(1,2,3,4,5); - 通过集合Collection默认方法stream()创建
List
list = List.of(1,2,3,4,5); Stream stream = list.stream(); - 通过数组创建
Integer a[] = new Integer[5]; Stream
stream = Arrays.stream(a); - 通过文件创建文件流
Stream
lines = Files.lines(Paths.get("D://a.txt"));
- 通过StreamAPI静态工厂创建
- 使用StreamAPI
public class StreamApp { private List
dataList; @Before public void before() { dataList = new ArrayList<>(List.of("zhangsan", "lisi", "wangwu", "zhaoliu", "gaoyuanyuan", "xietingfeng", "zhaoliu")); } @Test public void testMap() { // map操作 dataList.stream().map(User::new).forEach(System.out::println); } @Test public void testFilter() { // filter操作 dataList.stream().filter(name ->name.startsWith("z")).forEach(System.out::println); } @Test public void testAllMatch() { // allMatch操作 boolean boo = dataList.stream().allMatch(name ->name.matches("\\D+")); System.out.println(boo); } @Test public void testAnyMatch() { // anyMatch操作 boolean boo = dataList.stream().anyMatch(name ->name.contains("y")); System.out.println(boo); } @Test public void testCount() { //统计操作 System.out.println(dataList.stream().count()); } @Test public void testDistinct() { //去重操作 dataList.stream().distinct().forEach(System.out::println); } @Test public void testFindAny() { //findAny操作 System.out.println(dataList.stream().findAny().orElse("liuhf")); } @Test public void testFindFirst() { // findFirst操作 System.out.println(dataList.stream().findFirst().orElse("liuhf")); } @Test public void testFlatMap() { // 扁平化 dataList.stream().flatMap(name->Stream.of(name.split("z"))).forEach(System.out::println); } @Test public void testForeach(){ // 遍历 dataList.stream().forEach(System.out::println); } @Test public void testForeachOrder(){ dataList.stream().forEachOrdered(System.out::println); } @Test public void testLimit(){ // limit操作 dataList.stream().limit(2).forEach(System.out::println); } @Test public void testMax(){ // 查大值 System.out.println(dataList.stream().max(Comparator.comparingInt(n ->n.charAt(0))).orElse("liuhf")); } @Test public void testMin(){ // 查最小值 System.out.println(dataList.stream().min(Comparator.comparingInt(n ->n.charAt(0))).orElse("liuhf")); } @Test public void testNoneMatch(){ // 查不存在 System.out.println(dataList.stream().noneMatch(name ->name.startsWith("a"))); } @Test public void testPeek(){ // peek 操作 List names = dataList.stream().peek(name ->System.out.println(name.charAt(0))).toList(); } @Test public void testReduce(){ // 统计 int val = Stream.of(1, 2, 3, 4, 5).reduce(Integer::sum).orElse(0); System.out.println(val); int value = Stream.of(1, 2, 3, 4, 5).reduce(0, Integer::sum); System.out.println(value); Integer reduce = Stream.of(1, 2, 3, 4, 5).reduce(0, Integer::sum, Integer::sum); System.out.println(reduce); } @Test public void testSorted(){ // 排序 dataList.stream().sorted().forEach(System.out::println); System.out.println(">>>>>>>>>>>>>>>>>>>"); dataList.stream().sorted(Comparator.comparing(x->x.charAt(1))).forEach(System.out::println); } @Test public void testToArray(){ //转换为数组 Object[] array = dataList.stream().toArray(); for (Object o : array) { System.out.println(o); } System.out.println(">>>>>>>>>>>>>"); //可以使用构造引用,为了表诉清楚先这样编写 for (String s : dataList.stream().toArray(x ->new String[x])) { System.out.println(s); } } @Test public void testSkip(){ //跳过 dataList.stream().skip(2).forEach(System.out::println); } static class User { String name; public User(String name) { this.name = name; } @Override public String toString() { return "User{" + "name='" + name + '\'' + '}'; } } } - Stream收集器Collector
public class CollectorApp { private List
data; @Before public void before() { data = new ArrayList<>(List.of("1", "2", "3", "4", "5")); } @Test public void testAveragingInt() { //求平均值 Double collect = data.stream().collect(Collectors.averagingInt(Integer::valueOf)); System.out.println(collect); } @Test public void testAveragingDouble() { //求平均值 Double collect = data.stream().collect(Collectors.averagingDouble(Double::valueOf)); System.out.println(collect); } @Test public void testAveragingLong() { //求平均值 Double collect = data.stream().collect(Collectors.averagingLong(Long::valueOf)); System.out.println(collect); } @Test public void testCollectingAndThen(){ //收集以及做额外的转换 Set collect = data.stream().collect(Collectors.collectingAndThen(Collectors.toSet(), Collections::unmodifiableSet)); } @Test public void testCounting(){ Long count = data.stream().collect(Collectors.counting()); System.out.println(count); } @Test public void testGroupingBy(){ //参数1: 分组函数 Map >map = data.stream().collect(Collectors.groupingBy(num ->Integer.parseInt(num) % 2 == 0)); System.out.println(map); //参数1:分组函数 参数2:收集器类型 Map >map1 = data.stream().collect(Collectors.groupingBy(num ->Integer.parseInt(num) % 2 == 0, Collectors.toSet())); System.out.println(map1); //参数1:分组函数 参数2:工厂,提供容器类型 参数3:收集器类型 TreeMap >map2 = data.stream().collect(Collectors.groupingBy(num ->Integer.parseInt(num) % 2 == 0, () ->new TreeMap<>(), Collectors.toSet())); System.out.println(map2); } @Test public void testJoining(){ //将元素合并为字符串且无分隔符 String collect = data.stream().collect(Collectors.joining()); System.out.println(collect); String collect1 = data.stream().collect(Collectors.joining(",")); System.out.println(collect1); String collect2 = data.stream().collect(Collectors.joining(",", "[", "]")); System.out.println(collect2); } @Test public void testMapping(){ // 同stream的map函数,使用频率较少,只在stream的map函数不方便使用是才会选择 Set collect = data.stream().collect(Collectors.mapping(Integer::parseInt, Collectors.toSet())); System.out.println(collect); } @Test public void testMaxBy(){ // 求大值,同stream的max() String max = data.stream().collect(Collectors.maxBy((n1, n2) ->Integer.parseInt(n1) - Integer.parseInt(n2))).orElse("0"); System.out.println(max); } @Test public void testMinBy(){ // 求最小值,同stream的min() String min = data.stream().collect(Collectors.minBy((n1, n2) ->Integer.parseInt(n1) - Integer.parseInt(n2))).orElse("0"); System.out.println(min); } @Test public void testPartitioningBy(){ //分割,一个特殊分组,只能分出boolean类型的key Map >map = data.stream().collect(Collectors.partitioningBy(num ->Integer.parseInt(num) % 2 == 0)); System.out.println(map); //提供一个收集器 Map >map1 = data.stream().collect(Collectors.partitioningBy(num ->Integer.parseInt(num) % 2 == 0,Collectors.toSet())); System.out.println(map1); } @Test public void testReducing(){ //同stream函数reduce函数,合并 String s = data.stream().collect(Collectors.reducing((n1, n2) ->String.valueOf(Integer.parseInt(n1) + Integer.parseInt(n2)))).orElse("0"); System.out.println(s); String s1 = data.stream().collect(Collectors.reducing("0",(n1, n2) ->String.valueOf(Integer.parseInt(n1) + Integer.parseInt(n2)))); System.out.println(s1); String s2 = data.stream().collect(Collectors.reducing("0",(n)->String.valueOf(Integer.parseInt(n)+1),(n1, n2) ->String.valueOf(Integer.parseInt(n1) + Integer.parseInt(n2)))); System.out.println(s2); } @Test public void testSummarizing(){ //总结 DoubleSummaryStatistics collect = data.stream().collect(Collectors.summarizingDouble(Double::parseDouble)); System.out.println(collect); IntSummaryStatistics collect1 = data.stream().collect(Collectors.summarizingInt(Integer::parseInt)); System.out.println(collect1); LongSummaryStatistics collect2 = data.stream().collect(Collectors.summarizingLong(Long::parseLong)); System.out.println(collect2); } @Test public void testSumming(){ //计算总和 Double aDouble = data.stream().collect(Collectors.summingDouble(Double::parseDouble)); System.out.println(aDouble); Integer aInt = data.stream().collect(Collectors.summingInt(Integer::parseInt)); System.out.println(aInt); Long aLong = data.stream().collect(Collectors.summingLong(Long::parseLong)); System.out.println(aLong); } @Test public void testToList(){ List collect = data.stream().collect(Collectors.toList()); } @Test public void testToSet(){ Set collect = data.stream().collect(Collectors.toSet()); } @Test public void testCollection(){ LinkedList collect = data.stream().collect(Collectors.toCollection(LinkedList::new)); } @Test public void testToMap(){ Map collect1 = data.stream().collect(Collectors.toMap(k ->Integer.parseInt(k) + 1, v ->v)); Map collect2 = data.stream().collect(Collectors.toMap(k ->Integer.parseInt(k) + 1, v ->v,(n1,n2)->String.valueOf(Integer.parseInt(n1)+Integer.parseInt(n2)))); Map collect3 = data.stream().collect(Collectors.toMap(k ->Integer.parseInt(k) + 1, v ->v,(n1,n2)->String.valueOf(Integer.parseInt(n1)+Integer.parseInt(n2)),TreeMap::new)); System.out.println(collect1); System.out.println(collect2); System.out.println(collect3); //toConcurrentMap同toMap一样,只是Map为线程安全的ConcurrentMap } }
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
文章名称:Stream流用法示例-创新互联
转载源于:http://hbruida.cn/article/dgedgc.html