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 + '}'; } }