Collection接口是List、Set和Queue接口的父接口,该接口里面定义的方法既可以用于操作Set集合,也可以用于操作List和Queue集合。Collection接口里定义了如下操作集合元素的方法。
在传统模式下,把一个对象“丢进”集合中后,集合会忘记这个对象的类型——也就是说,系统自动把所有的集合元素都当作Object类型。从JDK1.5之后,这种状态得到了改进,可以使用泛型来限制集合里的元素类型。
Java 8 为 Iterable 接口新增了一个 forEach (Consumer action)默认方法,该方法所需的参数类型是一个函数式集合。而Iteration是collection的父接口,因此collection也可以使用这个方法。
当程序调用这个方法的时候,程序会依次将集合元素传递给Consummer的accept(T t)方法(该接口中唯一的抽象方法)。正因为Consumer是函数式接口,因此可以使用lambda表达式来遍历集合元素,
如下程序示范了使用lambda表达式来遍历集合元素
import java.util.HashSet;
public class CollectionEach{
public static void main(String[] args){
HashSet books = new HashSet<>();
books.add("java 学习");
books.add("从入门到放弃");
books.forEach(obj -> System.out.println(obj));
}
}
输出结果如下
java 学习
从入门到放弃
除可使用Iterator接口迭代访问Collection集合里面的元素之外,使用Java5提供的foreach循环迭代访问集合元素更加便捷。如下程序示范了使用foreach循环来迭代访问集合元素。
import java.util.HashSet;
public class CollectionEach{
public static void main(String[] args){
HashSet books = new HashSet<>();
books.add("java 学习");
books.add("从入门到放弃");
for(Object obj : books){
System.out.println(obj);
}
}
}
Java 8 为Collection集合新增了一个removeIf(Predicate filter)方法,该方法将会批量删除符合filter条件的元素。该方法需要一个Predicate(谓词)对象作为参数,President也是函数式接口,因此可以使用Lambda表达式作为参数。
如下程序示范了使用Predicate来过滤集合
import java.util.HashSet;
public class CollectionEach{
public static void main(String[] args){
HashSet books = new HashSet<>();
books.add("java 学习");
books.add("从入门到放弃");
books.add("123412341234123412");
books.removeIf(ele -> ((String) ele).length()<10);
for(Object obj : books){
System.out.println(obj);
}
}
}
输出结果如下
123412341234123412
Java8还新增了Stream、IntStream、LongStream、DoubleStream等流式API,这些API代表多个支持串行和并行聚集操作的元素。上面四个接口中,Stream是一个通用的流接口,而IntStream、LongStream和DoubleStream则代表了元素类型为Int、Long 、 double的流。
Java 8 还为上面每个流式API提供了对应的Builder,例如 Stream.builder
IntStream.Builder、LongStream.Builder,开发者可以通过这些Builder来创建对应的流。
独立使用Stream的步骤如下:
在上面的四个步骤当中,第四步可以根据具体需求来调用不同的方法,Stream提供了大量的聚集方阿飞供用户调用,具体可参考Stream或者XxxStream的API文档。
Stream提供了大量的方法进行聚集操作,这样可以获取该流的相关信息。注意:上面粗体字代码每次只能执行一行,因此需要把其他粗体字代码注释掉。
Stream提供大量的方法进行聚集操作,这些方法既可以是“中间的”,也可以是“末端的”
除此之外,关于流的方法还有如下的两个特征。
下面简单介绍Stream的常用中间方法
下面简单介绍一下Stream常用的末端方法。
除此之外,Java8允许使用流失API来操作集合,Collection接口提供了一个stream()默认方法,该方法可以返回该集合对应的流,接下来即可通过流失API来操作集合元素。由于Stream可以对集合元素进行整体的聚集操作,因此Stream极大的丰富了集合的功能。