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;}
@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", age=" + age +'}';}
}