处理List数据的时候往往需要通过一个for循环或者while 循环。
在JDK8中引入了Stream,通过stream,可以便捷地处理List,并且减少比较多模版式的代码,在Stream中也可以使用lambda表达式。
上demo
先定义一个简单的实体类
public class TestBean {
private Integer id;;
private String name;
private Integer score;
public TestBean(int id, String name, Integer score) {
this.id = id;
this.name = name;
this.score = score;
}
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 Integer getScore() {
return score;
}
public void setScore(Integer score) {
this.score = score;
}
@Override
public String toString() {
return "{" +
"id=" + id +
", name='" + name + '\'' +
", score=" + score +
"} ";
}
}
做一个初始化方法
private List<TestBean> buildList() {
TestBean testBean0 = new TestBean(0, "name0", 0);
TestBean testBean1 = new TestBean(1, "name1", 10);
TestBean testBean2 = new TestBean(2, "name2", 20);
TestBean testBean3 = new TestBean(3, "name3", 30);
TestBean testBean4 = new TestBean(4, "name4", 40);
TestBean testBean5 = new TestBean(5, "name5", 50);
TestBean testBean6 = new TestBean(6, "name6", 60);
TestBean testBean7 = new TestBean(7, "name7", 70);
TestBean testBean8 = new TestBean(8, "name8", 80);
TestBean testBean9 = new TestBean(9, "name9", 90);
ArrayList<TestBean> arrayList = new ArrayList<>();
arrayList.add(testBean0);
arrayList.add(testBean1);
arrayList.add(testBean2);
arrayList.add(testBean3);
arrayList.add(testBean4);
arrayList.add(testBean5);
arrayList.add(testBean6);
arrayList.add(testBean7);
arrayList.add(testBean8);
arrayList.add(testBean9);
return arrayList;
}
max
取最大值,这个最大值取决于比较的方式
TestBean maxTestBean = list.stream().max(Comparator.comparingInt(TestBean::getScore)).get();
System.out.println(maxTestBean);
输出
{
id=9, name='name9', score=90}
min
取最小值,最小值也是取决于比较的方式
TestBean minTestBean = list.stream().min(Comparator.comparingInt(TestBean::getScore)).get();
System.out.println(minTestBean);
输出
{
id=0, name='name0', score=0}
forEach
类似于for 循环,遍历每一个元素。
举个最简单的例子,循环输出逻辑
//简单foreach输出
list.stream().forEach(testBean -> {
System.out.print(testBean);
});
//简化输出方法
list.stream().forEach(System.out::print);
//再简化 这个好像已经不是stream 但这不重要
list.forEach(System.out::print);
以上代码的输出都是
{
id=0, name='name0', score=0} {
id=1, name='name1', score=10} {
id=2, name='name2', score=20} {
id=3, name='name3', score=30} {
id=4, name='name4', score=40} {
id=5, name='name5', score=50} {
id=6, name='name6', score=60} {
id=7, name='name7', score=70} {
id=8, name='name8', score=80} {
id=9, name='name9', score=90}
修改分数
//修改score 每个的 score + 10
list.stream().forEach(element -> {
element.setScore(element.getScore() + 10);
});
list.forEach(System.out::print);
输出为
{
id=0, name='name0', score=10} {
id=1, name='name1', score=20} {
id=2, name='name2', score=30} {
id=3