java流式计算Stream
流(Stream)到底是什么呢? 是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。
“集合讲的是数据,流讲的是计算! ”
特点:
-
Stream自己不会存储元素。
-
Stream不会改变源对象。相反,他们会返回一个持有结果的新Stream。
-
Stream操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。
下面的代码中,需求是要把list集合中的元素全部变成乘以2,就需要使用map的stream流式计算方法,map接受的是一个JDK提供的,Function接口,所以lambda实现方法时需要一个返回值,一个参数。
map----映射(将元素映射成另外的元素)
collect----stream转list
Stream流就相当于java对集合操作的sql语句,可以进行各种类似sql查询筛选的操作。
题目:请按照给出数据,找出同时满足以下条件的用户,也即以下条件全部满足
偶数工D且年龄大于24且用户名转为大写且用户名字母倒排序
只输出一个用户名字
运行结果:
代码:
import java.util.Arrays;
import java.util.List;
/**
* 题目:请按照给出数据,找出同时满足以下条件的用户,也即以下条件全部满足
* 偶数工D且年龄大于24且用户名转为大写且用户名字母倒排序
* 只输出一个用户名字
*/
public class StreamDemo {
public static void main(String[] args) {
User u1 = new User(11, "a", 23);
User u2 = new User(12, "b", 24);
User u3 = new User(13, "c", 22);
User u4 = new User(14, "d", 28);
User u5 = new User(16, "e", 26);
List<User> list = Arrays.asList(u1,u2,u3,u4,u5);
list.stream().filter((u)->{return u.getId()%2==0;})//过滤
.filter(user -> {return user.getAge()>24;})//过滤
.map((u)->{return u.getUsername().toUpperCase();})//映射
.sorted(((o1, o2) -> {return o2.compareTo(o1);}))//排序
.limit(1) //limit
.forEach(System.out::println);
}
}
class User{
private Integer id;
private String username;
private Integer age;
public User(Integer id, String username, Integer age) {
this.id = id;
this.username = username;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", age=" + age +
'}';
}
}