java8新特性-collection集合框架增强

在jdk8中,集合框架中增加了一个java.util.stream

java.util.stream用以来充分利用lambda的特性,以及降低java集合框架使用的复杂度,让开发人员聚焦于做什么而不是怎么做

典型的例子

下面这个例子,按年龄对Studen进行了过滤,并输入符合条件的学生。(Student类在lambda一文中有说明)

可以看到,新的api写法,比传统的for-each要简单的多了

parallelStream这个是并行处理的,能够充分利用多核cpu的性能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* Copyright (c) 2014, http://momotime.me. All rights reserved.
*/
public class TestCollection {
public static void main(String args[]) {
Student s1 = new Student("aa", 12, "male");
Student s2 = new Student("bb", 18, "female");
Student s3 = new Student("cc", -2, "female");
List<Student> list = new ArrayList<>();
list.add(s1);
list.add(s2);
list.add(s3);
list.stream().
filter(e -> e.getAge() > 0)
.forEach(e -> System.out.println(e.getName()));
list.parallelStream()
.filter(e -> e.getAge() > 15)
.forEach(e -> System.out.println(e.getName()));
}
}

可以使用collect方法,返回一个新的集合

1
list.parallelStream().filter(e -> e.getAge() > 15).collect(Collectors.toList())

可以通过mapTo*方法获取map中对象的value

下面的代码,返回了平均年龄

1
list.stream().mapToInt(Student::getAge).average().getAsDouble();

stream包里面的内容还有很多,不一一介绍了。