中国网上购物网站,全国做网站的公司有哪些,网址价格,无需注册网站模板下载/***JDK8 Stream特性* Created by chengbx on 2018/5/27.* Java 8 中的 Stream 是对集合#xff08;Collection#xff09;对象功能的增强#xff0c;它专注于对集合对象进行各种非常便利、高效的聚合操作#xff08;aggregate operation#xff09;#xff0c;* 或者大… /***JDK8 Stream特性* Created by chengbx on 2018/5/27.* Java 8 中的 Stream 是对集合Collection对象功能的增强它专注于对集合对象进行各种非常便利、高效的聚合操作aggregate operation* 或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda 表达式极大的提高编程效率和程序可读性。* 同时它提供串行和并行两种模式进行汇聚操作并发模式能够充分利用多核处理器的优势使用 fork/join 并行方式来拆分任务和加速处理过程。* 通常编写并行代码很难而且容易出错, 但使用 Stream API 无需编写一行多线程的代码就可以很方便地写出高性能的并发程序。* 所以说Java 8 中首次出现的 java.util.stream 是一个函数式语言多核时代综合影响的产物。* 一、Stream API 的操作步骤* * 1. 创建 Stream** 2. 中间操作** 3. 终止操作(终端操作)** 4. 接口中的默认方法* 接口默认方法的”类优先”原则* 若一个接口中定义了一个默认方法而另外一个父类或接口中* 又定义了一个同名的方法时* 1.选择父类中的方法。如果一个父类提供了具体的实现那么* 接口中具有相同名称和参数的默认方法会被忽略.* 2.接口冲突。如果一个父接口提供一个默认方法而另一个接* 口也提供了一个具有相同名称和参数列表的方法不管方法* 是否是默认方法那么必须覆盖该方法来解决冲突* 5. 新增的重复注解Repeatble和类型注解* java8新增了重复注解其使用方式为Repeatable(Authorities.class)public interface Authority {String role();}public interface Authorities {Authority[] value();}public class RepeatAnnotationUseNewVersion {Authority(roleAdmin)Authority(roleManager)publicvoiddoSomeThing(){ }}2.Java8为ElementType枚举增加了TYPE_PARAMETER、TYPE_USE两个枚举值从而可以使用Target(ElementType_TYPE_USE)修饰注解定义这种注解被称为类型注解可以用在任何使用到类型的地方*/
public class TestStream {ListEmployee employees Arrays.asList(new Employee(aaa,11,5000),new Employee(bbb,21,5200),new Employee(ccc,13,5500),new Employee(ddd,54,6400),new Employee(eee,16,7100),new Employee(fff,74,7120),new Employee(ggg,12,7150));/*** 创建stream*/Testpublic void test1(){//1. Collection 提供了两个方法 stream() 与 parallelStream()ListString list new ArrayList();StreamString stream list.stream();StreamString parallelStream list.parallelStream(); //获取一个并行流//2. 通过 Arrays 中的 stream() 获取一个数组流Integer[] nums new Integer[10];StreamInteger stream1 Arrays.stream(nums);//3. 通过 Stream 类中静态方法 of()StreamInteger stream2 Stream.of(1,2,3,4,5,6);//4. 创建无限流//迭代StreamInteger stream3 Stream.iterate(0, (x) - x 2).limit(10);stream3.forEach(System.out::println);//生成StreamDouble stream4 Stream.generate(Math::random).limit(2);stream4.forEach(System.out::println);}/*筛选与切片filter——接收 Lambda 从流中排除某些元素。limit——截断流使其元素不超过给定数量。skip(n) —— 跳过元素返回一个扔掉了前 n 个元素的流。若流中元素不足 n 个则返回一个空流。与 limit(n) 互补distinct——筛选通过流所生成元素的 hashCode() 和 equals() 去除重复元素*///内部迭代迭代操作 Stream API 内部完成Testpublic void test2(){//中间操作,不会执行任何操作StreamEmployee str employees.stream().filter((e) - e.getAge()30).limit(1);//终止操作,一次性执行全部内容即惰性求值str.forEach(System.out::println);// employees.stream().filter((e) - e.getAge()30)// .forEach((employee) - System.out.println(employee));}//外部迭代Testpublic void test3(){IteratorEmployee it employees.iterator();while(it.hasNext()){System.out.println(it.next());}}Testpublic void test4(){employees.stream().filter((e) - {System.out.println(短路); // ||return e.getSalary() 5000;}).limit(3).forEach(System.out::println);}Testpublic void test5(){employees.parallelStream().filter((e) - e.getSalary() 5000).skip(2).forEach(System.out::println);}Testpublic void test6(){employees.stream().distinct().forEach(System.out::println);}/*** 映射* map -接收lambda将元素转换成其他形式获取信息接收一个函数作为参数该函数会被应用在每个元素上并将其映射成一个新的元素。* flatmap-接收一个函数作为参数将流中的每个值都换成另一个流然后把所有流连接成一个流*/Testpublic void test7(){ListString list Arrays.asList(aaa,bbb,ccc,ddd);list.stream().map((str) - str.toUpperCase()).forEach((str) - System.out.println(str));System.out.println(---------------);employees.stream().map(Employee::getName).forEach((name) -System.out.println(name));}/*** 排序* sorted()--自然排序(comparable)* sorted(Comparator com)--定制排序(Comparator)*/Testpublic void test8(){ListString list Arrays.asList(eee,ggg,ccc,ddd);list.stream().sorted().forEach(System.out::println);System.out.println(-------------------以下是定制排序-------------);employees.stream().sorted((e1,e2) -{if (e1.getAge() e2.getAge()) {return e1.getName().compareTo(e2.getName());}else{return Integer.compare(e1.getAge(),e2.getAge());}}).forEach((employee) - System.out.println(employee));}//3. 终止操作/*allMatch——检查是否匹配所有元素anyMatch——检查是否至少匹配一个元素noneMatch——检查是否没有匹配的元素findFirst——返回第一个元素findAny——返回当前流中的任意元素count——返回流中元素的总个数max——返回流中最大值min——返回流中最小值注意流进行了终止操作后不能再次使用*/Testpublic void test9(){boolean b employees.stream().allMatch((emp) - emp.getAge()15);System.out.println(b);System.out.println(---------------);boolean b1 employees.stream().anyMatch((emp) - emp.getAge()15);System.out.println(b1);System.out.println(---------------);boolean b2 employees.stream().noneMatch((emp) - emp.getAge()15);System.out.println(b2);System.out.println(---------------);OptionalEmployee optional employees.stream().sorted((emp1, emp2) - Double.compare(emp1.getSalary(),emp2.getSalary())).findFirst();System.out.println(optional.get());System.out.println(---------------);OptionalEmployee optional1 employees.parallelStream().filter((emp) - emp.getAge() 15).findAny();System.out.println(optional1);System.out.println(---------------);Long count employees.parallelStream().filter((emp) - emp.getAge() 15).count();System.out.println(count);OptionalDouble optiona3 employees.stream().map((emp) - emp.getSalary()).max(Double::compareTo);System.out.println(optiona3.get());System.out.println(---------------);OptionalEmployee optiona4 employees.stream().min((e1,e2) -Double.compare(e1.getSalary(),e2.getSalary()));System.out.println(optiona4);}/*** 归约reduce(T identity, BinaryOperator) / reduce(BinaryOperator) ——可以将流中元素反复结合起来得到一个值。*/Testpublic void test10(){ListInteger list Arrays.asList(1,2,3,4,5,6,7,8,9,10);Integer sum list.stream().reduce(0,(x,y) - xy);System.out.println(sum);//55System.out.println(---------------------);OptionalDouble sumSal employees.stream().map(Employee::getSalary).reduce(Double::sum);System.out.println(sumSal);}/*** 收集:* collect——将流转换为其他形式。接收一个 Collector接口的实现用于给Stream中元素做汇总的方法*///将employee集合中name值取出来放入集合中 aaa bbb ccc ddd eee fff gggTestpublic void test11(){List list employees.stream().map(Employee::getName).collect(Collectors.toList());list.forEach(System.out::println);}Testpublic void test12(){Set set employees.stream().map(Employee::getName).collect(Collectors.toSet());set.forEach(System.out::println);}Testpublic void test13(){HashSet hashSet employees.stream().map(Employee::getName).collect(Collectors.toCollection(HashSet::new));hashSet.forEach(System.out::println);}//获取集合中元素的个数 7Testpublic void test14(){long count employees.stream().collect(Collectors.counting());System.out.println(count);System.out.println(----------------);//获取工资平均值Double avgMoney employees.stream().collect(Collectors.averagingDouble((emp) - emp.getSalary()));System.out.println(avgMoney);//6210.0System.out.println(----------------);//工资总和Double sumMoney employees.stream().collect(Collectors.summingDouble(Employee::getSalary));System.out.println(sumMoney);//最大值OptionalEmployee optional employees.stream().collect(Collectors.maxBy((emp1,emp2) - Double.compare(emp1.getSalary(),emp2.getSalary())));System.out.println(optional.get());//Employee{nameggg, age12, salary7150.0}//最小值OptionalDouble minMoney employees.stream().map(Employee::getSalary).collect(Collectors.minBy(Double::compare));System.out.println(minMoney.get());}//分组Testpublic void test15(){employees.stream().collect(Collectors.groupingBy(Employee::getAge));}//分区Testpublic void test16(){MapBoolean,ListEmployee map employees.stream().collect(Collectors.partitioningBy((e) - e.getSalary() 6000));System.out.println(map);//{false[Employee{nameaaa, age11, salary5000.0}, Employee{namebbb, age21, salary5200.0},// Employee{nameccc, age13, salary5500.0}],// true[Employee{nameddd, age54, salary6400.0}, Employee{nameeee, age16, salary7100.0},// Employee{namefff, age74, salary7120.0}, Employee{nameggg, age12, salary7150.0}]}
}Testpublic void test17(){DoubleSummaryStatistics dss employees.stream().collect(Collectors.summarizingDouble(Employee::getSalary));//求平均值System.out.println(dss.getAverage());//求最大值System.out.println(dss.getMax());//求和System.out.println(dss.getSum());} Testpublic void test18(){String name employees.stream().map(Employee::getName).collect(Collectors.joining(,));System.out.println(name);//aaa,bbb,ccc,ddd,eee,fff,ggg}
} 转载于:https://www.cnblogs.com/cbxBlog/p/9123106.html