2.Java 8新特性概述(二)
2018-03-12 20:09
351 查看
Streams
java.util.Stream表示了某一种元素的序列,在这些元素上可以进行各种操作,这些操作可以是中间操作,也可以是完结操作。完结操作会返回一个某种类型的值,而中间操作会返回流对象本身,并且可以通过多次调用同一个流的操作方法来将操作结果串起来(就像StringBuffer的append方法一样)。
Stream是在一个源的基础上创建出来的,例如java.util.Collection中的list或者set(map不能作为Stream的源)。Stream操作往往可以通过顺序或者并行两种方式来执行。//通过String类型的list,创建示例数据
//Java 8中可以直接调用Collections.stream()或者Collection.parallelStream()方法来创建一个流对象
List<String> stringCollection = new ArrayList<>();
stringCollection.add("ddd2");
stringCollection.add("aaa2");
stringCollection.add("bbb1");
stringCollection.add("aaa1");
stringCollection.add("bbb3");
stringCollection.add("ccc");
stringCollection.add("bbb2");
stringCollection.add("ddd1");
Stream<String> stream = stringCollection.stream();
//Stream<String> stream = stringCollection.parallelStream();
Filter
Filter接受一个predicate接口类型的变量,并将所有流对象中的元素进行过滤。该操作是一个中间操作,因此它允许我们在返回结果的基础上再进行其他的流操作(比如forEach)。ForEach接受一个function接口类型的变量,用来执行对每一个元素的操作。ForEach是一个中止操作。它不返回流,所以我们不能再调用其他的流操作。
stringCollection
.stream()
.filter((s) -> s.startsWith("a"))
.forEach(System.out::println);
Sorted
//Sorted是一个中间操作,能够返回一个排过序的流对象的视图 //流对象中的元素会默认按照自然顺序进行排序,除非你自己指定一个Comparator接口来改变排序规则 //sorted只是创建一个流对象排序的视图,而不会改变原来集合中元素的顺序。原来string集合中的元素顺序是没有改变的 stringCollection .stream() .sorted() .filter((s) -> s.startsWith("a")) .forEach(System.out::println);
Map
map是一个对于流对象的中间操作,通过给定的方法,它能够把流对象中的每一个元素对应到另外一个对象上。下面的例子就演示了如何把每个string都转换成大写的string. 不但如此,你还可以把每一种对象映射成为其他类型。对于带泛型结果的流对象,具体的类型还要由传递给map的泛型方法来决定。stringCollection.stream()
.map(String::toUpperCase)
.sorted((a, b) -> b.compareTo(a))
.forEach(System.out::println);
Match
匹配操作有多种不同的类型,都是用来判断某一种规则是否与流对象相互吻合的。所有的匹配操作都是终结操作,只返回一个boolean类型的结果。boolean anyStartsWithA = stringCollection .stream() .anyMatch((s) -> s.startsWith("a")); System.out.println(anyStartsWithA); // true boolean allStartsWithA = stringCollection .stream() .allMatch((s) -> s.startsWith("a")); System.out.println(allStartsWithA); // false boolean noneStartsWithZ = stringCollection .stream() .noneMatch((s) -> s.startsWith("z")); System.out.println(noneStartsWithZ); // true
Count
//Count是一个终结操作,它的作用是返回一个数值,用来标识当前流对象中包含的元素数量 long startsWithB = stringCollection .stream() .filter((s) -> s.startsWith("b")) .count(); System.out.println(startsWithB); // 3
Reduce
该操作是一个终结操作,它能够通过某一个方法,对元素进行削减操作。该操作的结果会放在一个Optional变量里返回。Optional<String> reduced =
stringCollection
.stream()
.sorted()
.reduce((s1, s2) -> s1 + "#" + s2);
reduced.ifPresent(System.out::println);
// "aaa1#aaa2#bbb1#bbb2#bbb3#ccc#ddd1#ddd2"
相关文章推荐
- java高级特性之集合概述
- Java 8 新特性概述
- java9新特性-1-概述
- java三大特性封装、继承、多态概述
- Java 8 新特性概述
- java高级特性之集合概述 其二
- Java 8 新特性概述
- javaSE_8系列博客——Java语言的特性(三)--类和对象(1)--概述
- Java 8 新特性概述
- java8新特性概述
- Java 8 新特性概述
- Java 9 新特性概述
- 3.Java 8新特性概述(三)
- Java8 新特性概述(60%)
- Java8新特性概述
- 1.Java 8新特性概述(一)
- Java 9 新特性概述
- javaSE_8系列博客——Java语言的特性(三)--类和对象(2)--类(宏观概述)
- Java8特性总结(一)概述
- JAVA基础【1.2】《Java核心技术1》Java程序设计概述-Java JDK1.5新特性【收集】