在Java 8 API出现了一个新的特性称为流Stream,Stream简单来说可以用于对集合的数据做非常复杂的查找、排序、筛选过滤和映射数据等操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。
Stream的特点:
- Stream 不是集合元素,它不是数据结构并不保存数据.它更像一个高级版本的 Iterator。只能显式地一个一个遍历元素并对其执行某些操作.
- Stream 就如同一个迭代器(Iterator),单向,不可往复,数据只能遍历一次.
Stream接口中定义了几个常用的转换方法
- map: 对于Stream中包含的元素使用给定的转换函数进行转换操作,新生成的Stream只包含转换生成的元素。
比如,取出对象集合中的姓名,并生成List集合( 抽取内容生成集合),代码如下:
List.add(new Person(String name, Integer age, Integer address,sex));
// 初始化数据
personList.add(new Person("李五", 18, 北京, 1));
personList.add(new Person("赵钱", 20, 上海, 1));
personList.add(new Person("孙航", 16, 海南, 2));
personList.add(new Person("王五", 32, 海南), 1);
personList.add(new Person("徐七", 19, 西安), 2);
private static void demo() {
List<String> name = List.stream().map(Person::getName).collect(Collectors.toList());
name.forEach(name ->{
System.out.println(name);
});
}
运行结果:
李五
赵钱
孙航
王五
徐七
- distinct: 对于Stream中包含的元素进行去重操作(去重逻辑通过流中元素的 hashCode() 和 equals() 去除重复元素),新生成的Stream中没有重复的元素;
具体代码实现:
private static void testFilter() {
list.stream().filter(person -> person.getSex() == 1).forEach(person -> {
System.out.println("男生 ->" + person.toString());
});
}
运行结果:
Person{
name="李五, age