Stream流
JDK1.8引入的新特性。用于解决已有集合类库既有的一些弊端,依赖于Lambda表达式。
传统从集合当中取出元素
public class Dome01Stream{
public static void main(String[] args){
//构建一个集合
List<String> list = new ArratList<String>();
list.add("abc123");
list.add("aaa22");
list.add("bcd125");
list.add("abcd120");
list.add("bbb230");
//我需要字符串中包含1的元素取出来
List<String> list2 = new ArratList<String>();
for(String str:lis){
if(str.contains("1")){
list2.add(str);
}
}
//需要字符串长度不能超过6个的元素取出来
List<String> list3 = new ArrayList<String>();
for(String str:list2){
if(str.length()<=6){
list3.add(str);
}
}
//遍历查看最终想要的元素集合
for(String str:list3){
System.out.println(str)
}
}
}
经过观察需要对源集合中的元素进行不断的循环,而且每次循环都需要重头到尾的进行遍历
如果希望对集合中的元素进行筛选过滤:
1.将集合A中根据条件一过滤拿到子集合B;
2.再将子集和B根据条件二过滤筛选为子集和C。
Stream流的更优写法:
借助于Stream流对象中的API方法:
public class TestStream {
public static void main(String[] args) {
// 构建一个集合 of("abc123","aaa22")
List<String> list = new ArrayList<String>();
list.add("abc123");
list.add("aaa22");
list.add("bcd125");
list.add("abcd120");
list.add("bbb230");
// 需要字符串中包含数字1的元素取出来
Stream<String> stream = list.stream();// 源集合A
// Stream<T> filter(Predicate<? super T> predicate) 返回由与此给定谓词匹配的此流的元素组成的流。 借助于它的方法 booolean test(T t)
Stream<String> stream02 = stream.filter(str -> str.contains("1")); //子集合B
// 需要集合当中字符串长度不能超过6个的元素取出来
Stream<String