map
返回一个新的stream,如从一个对象流获取某个属性,返回属性的流
peek
返回的stream格式不会发生变化,但是可以对stream中的对象的某个属性进行赋值操作等
foreach
函数返回值是void,如可以单纯对流进行打印操作。也可以先返回集合名,对集合对象中的字段值进行赋值操作等
public class Person {
private String name;
private Integer age;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
@Test
public void testMapPeekForeach() {
Person p1 = new Person("张三", 19);
Person p2 = new Person("李四", 21);
Person p3 = new Person("王五", 17);
List<Person> l1 = Lists.newArrayList(p1, p2, p3);
List<Integer> l1Ages = l1.stream()
.map(Person::getAge)
.collect(Collectors.toList());
System.out.println("map: " + l1Ages);
List<Person> l2 = Lists.newArrayList(p1, p2, p3)
.stream()
.peek(p -> p.setAge(p.getAge() + 10))
.collect(Collectors.toList());
System.out.println("peek: " + l2);
List<Person> l3 = Lists.newArrayList(p1, p2, p3);
l3.forEach(p -> {
p.setAge(p.getAge() + 10);
System.out.println("foreach-name: " + p.getName());
});
System.out.println("foreach: " + l3);
}
打印结果:
map: [19, 21, 17]
peek: [Person{name='张三', age=29}, Person{name='李四', age=31}, Person{name='王五', age=27}]
foreach-name: 张三
foreach-name: 李四
foreach-name: 王五
foreach: [Person{name='张三', age=39}, Person{name='李四', age=41}, Person{name='王五', age=37}]