java8--stream流API

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jasnet_u/article/details/83475048

生成数据流

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

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

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

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

示例代码1: 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);
         
     
    }
 
}

示例代码2: 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);
    }
 
}

猜你喜欢

转载自blog.csdn.net/jasnet_u/article/details/83475048