博客详情

java8--stream流API (原创)

作者: 朝如青丝暮成雪
发布时间:2018-10-24 18:02:24  文章分类:java8   阅读(967)  评论(0)

 生成数据流

使用Java8,Collection 接口有两个方法来生成流。

  • stream() -返回顺序流考虑集合作为其源。

  • parallelStream() - 返回并行数据流考虑集合作为其源


流/Stream是在JAVA8中引入的一个抽象,可以处理类似SQL语句声明数据

示例代码:

StreamTest.java


package com.tingcream.java8.stream;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * rt.jar  java.util.stream 包
 * @author jelly
 *
 */
public class StreamTest {
	
	public static void main(String[] args) {
		
		System.out.println("集合中去除空元素");
		List<String> ss = Arrays.asList("abc", "", "bc", "efg", "abcd","", null,"jkl");
		//List<String>  list2=  list.stream().filter(s-> !s.isEmpty()).collect(Collectors.toList());
		List<String>  ss2=  ss.parallelStream().filter(s-> s!=null&&!s.isEmpty() ).collect(Collectors.toList());
		System.out.println(ss);//原list没有改变
		System.out.println(ss2);
		System.out.println("==================");
		
		/*
		 * stream() 返回一个流
		 * parallelStream() 返回一个并行流
		 * filter() 截取子集
		 * map()  将整个map中所有元素进行映射
		 *  collect(Collectors.toList());  最终返回一个list
		 * distinct()  去重
		 * sorted() 指定排序规则
		 * limit() 排序后取几条数据
		 * max().get() 取最大值
		 * min().get() 取最小值
		 * count() 取元素数量
		 * 
		 * forEach() 对集合中元素进行遍历处理,无返回值
		 * 
		 * collect(Collectors.toList())
		 * collect(Collectors.toSet())
		 * collect(Collectors.toSet())
		 * collect(Collectors.toCollection())
		 * collect(Collectors.toMap())
		 * collect(Collectors.toMap())
		 * collect(Collectors.joining(", "))
		 * 
		 */
		
		List<Integer> nums = Arrays.asList(3, 2, 2, 3, 7, 3, 5, 4);
		//get list of unique squares
		List<Integer> nums2 = nums.parallelStream().map( a-> a*a).distinct().collect(Collectors.toList()); 
		
		List<Integer> nums3 = nums.parallelStream().map( a-> (a-2)*2).distinct().collect(Collectors.toList());
		List<Integer> nums4 = nums.parallelStream().map( a-> (a-2)*2).distinct().sorted().limit(2).collect(Collectors.toList());
		List<Integer> nums5 = nums.parallelStream().map( a-> (a-2)*2).distinct().sorted((a,b)->b-a).limit(2).collect(Collectors.toList());
		
		    Integer  max=     nums.parallelStream().map( a-> (a-2)*2).max((a,b)->a-b).get();//获取最大值  10
		    Integer  min=     nums.parallelStream().map( a-> (a-2)*2).min((a,b)->a-b).get();//获取最小值  0
		    long count =   nums.parallelStream().map( a-> (a-2)*2).distinct().count();//获取集合元素数量 5
		         
		     
		System.out.println(nums2);
		
		System.out.println(nums3);
		System.out.println(nums4);
		System.out.println(nums5);
		System.out.println(max);
		System.out.println(min); 
		System.out.println(count);
//		nums.stream().map( a-> (a-2)*2).forEach(System.out::println);
		nums.stream().map( a-> (a-2)*2).forEach(a->System.out.print(a+","));
		System.out.println();
		
		//collect 收集器
		String mergedString = ss.parallelStream().filter(s-> s!=null&&!s.isEmpty()).collect(Collectors.joining(", "));
		System.out.println("Merged String: " + mergedString);
		
	
	}

}


 StreamTest2.java


package com.tingcream.java8.stream;

import java.util.Arrays;
import java.util.List;

public class StreamTest2 {
	
	public static void main(String[] args) {
		
		List<Double> numbers = Arrays.asList(3d, 2d, 2d, 3d, 7d, 3d, 5d,4d,10d);

	/*	DoubleSummaryStatistics stats = numbers.stream().mapToDouble(a->a).summaryStatistics();
		
	    double   avg =   stats.getAverage();//平均值
	    double max= stats.getMax(); //最大值
	    double min= stats.getMin();//最小值
	    double sum    =  stats.getSum();//总和
	    long count = stats.getCount();//数量
	    
	    System.out.println("avg: "+avg);
	    System.out.println("max: "+max);
	    System.out.println("min: "+min);
	    System.out.println("sum: "+sum);
	    System.out.println("count: "+count);*/
		
	   /*boolean b=	numbers.parallelStream().anyMatch(a-> a>5);//      任何一个元素匹配了,则立即返回true
	  boolean b2=	numbers.parallelStream().allMatch(a-> a>5);//      所有元素都匹配了,则返回true
	  boolean b3= numbers.parallelStream().noneMatch(a-> a>5);// 所有元素都不匹配,则返回true
	   System.out.println(b);
	   System.out.println(b2);//false
	   System.out.println(b3);//false 
*/		
		 
	   double sum= 	numbers.parallelStream().mapToDouble(a->a).sum();
	   double avg=   numbers.parallelStream().mapToDouble(a->a).average().getAsDouble();
	   long count =numbers.parallelStream().mapToDouble(a->a).distinct().count();
	   double  max=numbers.parallelStream().mapToDouble(a->a).max().getAsDouble();
	   double min=numbers.parallelStream().mapToDouble(a->a).min().getAsDouble();
	   
	    System.out.println("avg: "+avg);
	    System.out.println("max: "+max);
	    System.out.println("min: "+min);
	    System.out.println("sum: "+sum);
	    System.out.println("count: "+count);
	}

}


关键字:  java8  stream

上一篇:java8--方法引用

下一篇:java8--Optional类

评论信息
暂无评论
发表评论

亲,您还没有登陆,暂不能评论哦! 去 登陆 | 注册

博主信息
   
数据加载中,请稍候...
文章分类
   
数据加载中,请稍候...
阅读排行
 
数据加载中,请稍候...
评论排行
 
数据加载中,请稍候...

Copyright © 叮叮声的奶酪 版权所有
备案号:鄂ICP备17018671号-1

鄂公网安备 42011102000739号