Stream
【1】Stream是java在JDK1.8后提供的一个流式集合。用于操作集合的工具。里面提供了大量的只有一个抽象方法的接口。
【2】根据“只有一个抽象方法的接口“的特性,我们很容易想到关于JDK1.8的接口新特性Lambda表达式。
可参考:https://blog.csdn.net/c17315377559/article/details/99122421
通过以下案例,来一起了解这个类。
【例题】找出下列以C开头的字母,并按ASCII码表的大小进行排序。使用Stream流的方式对List集合进行操作。
(china、cafe、hello、world、date、map、list、love,clear)
(1)使用匿名内部类的方法
public class StreamDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("china");
list.add("hello");
list.add("cafe");
list.add("world");
list.add("date");
list.add("map");
list.add("list");
list.add("love");
list.add("clear");
Stream<String> stream = list.stream();
stream.filter(new Predicate<String>() {
//过滤不以c开头的字符串
@Override
public boolean test(String t) {
return t.startsWith("c");
}
}).sorted(new Comparator<String>() {
//对剩下的字符串进行排序
//使用compareTo的方法
//如果返回的是负数,那么表示本对象小于传入的对象,是升序。
//如果返回的是正数,那么表示本对象大于传入的对象,是降序。
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
}).forEach(new Consumer<String>() {
//foreach增强for循环
@Override
public void accept(String t) {
System.out.println(t);
}
});
}
}
结果:
cafe
china
clear
使用filter方法对我们需要的内容进行过滤。实现Predicate接口中的test方法,返回false,则过滤掉。
使用sorted方法对我们需要的内容进行排序。实现Comparator接口中的compare方法,返回值为int。根据返回值的正负进行排序。
使用forEach方法对我们内容进行输出。
(2)使用lambda函数表达式进行
Stream<String> stream = list.stream();
stream.filter(t -> t.startsWith("c"))
.sorted((str1, str2) -> str1.compareTo(str2))
.forEach(t -> System.out.println(t));
由此可见,使用lambda表达式可以使我们的代码更加简洁。
关于lambda的内容,可以参考https://blog.csdn.net/c17315377559/article/details/99122421