什么是Stream:
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。
Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

常用方法——示例:
import com.seebon.spfcore.entities.po.mysql.sys.User;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class T {
class Dog{
Integer id;
String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Dog() {
}
public Dog(Integer id, String name) {
this.id = id;
this.name = name;
}
}
@Test
public void name() throws Exception {
List<Dog> dogs=new ArrayList<>();
Dog dog1=new Dog(1,"灰灰");
Dog dog2=new Dog(2,"胖胖");
Dog dog3=new Dog(3,"糖糖");
dogs.add(dog1);
dogs.add(dog2);
dogs.add(dog3);
}
}
-
foreach
foreach是一个最终操作(没有对stream做最终操作,对它的其他操作是不会生效的),没有返回值
//输出所有 狗的名字
dogs.stream().forEach(temp-> System.out.println(temp.getName()));
//花括号可以做更多操作
dogs.stream().forEach(temp->{
System.out.println(temp.getName());
});
//输出结果:
foreach-1灰灰
foreach-1胖胖
foreach-1糖糖
foreach-2灰灰
foreach-2胖胖
foreach-2糖糖
-
filter
//过滤掉名字叫灰灰的狗
List<Dog> dogs2 = dogs.stream().filter(dog -> !dog.getName().equals("灰灰")).collect(Collectors.toList());
//collect() 也是一个最终操作,所以前面的过滤操作会生效
dogs2.stream().forEach(dog -> System.out.println(dog.getName()));
//输出结果:
胖胖
糖糖
allMatch() 匹配查询集合中是否都符合条件,返回true/false
anyMatch() 匹配查询集合中是否存在符合条件的,返回true/false
count() 统计集合中数量
distinct() 去重复
………………
这样操作起来很直观,剩下的方法看到方法名基本就能知道他们的作用了,所以就不一一写到笔记了。
总结:
用stream操作集合,可以使代码看起来非常简洁,做自己想做的操作就OK,不用自己写迭代方面(内迭代)。
但是stream并不是没有性能开销,有时自己写迭代 运行会更快。
所以建议 如果对集合有两步以上的操作可以用stream。
网友评论