简单举例
Stream方法有很多,现在举一个小例子来说明
/**
* 题目要求:现在有5个用户!筛选:
* 1、ID必须是偶数
* 2、年龄必须大于23岁
* 3、用户名转为大写字母
* 4、用户名字母倒着排序
* 5、只输出一个用户!
*/
public class stream {
public static void main(String[] args) {
User u1 = new User(1,"a",21);
User u2 = new User(2,"b",22);
User u3 = new User(3,"c",23);
User u4 = new User(4,"d",24) ;
User u5 = new User(6,"e",25);
List<User> list = Arrays.asList(u1, u2,u3,u4,u5);
// 计算交给Stream流
list.stream()
//filter 筛选
.filter(u->{return u.getId()%2==0;})
.filter(u->{return u.getAge()>23;})
//转换大小
.map(u->{return u.getName().toUpperCase();})
//排序
.sorted( (uu1,uu2)->{return uu2.compareTo(uu1);})
//只取一个
.limit(1)
//输出
.forEach(System.out::println);
}
}
class User{
private int id;
private String name;
private int age;
getset不写了
Collectors.groupingBy
根据一个或多个属性对集合中的项目进行分组
//创建一个新的LinkedHashMap,通过年龄排序,类型为list
List<Role> roleList = Arrays.asList(role, role1, role2, role3);
Map<String,List<Role>> last = roleList.stream()
.collect(Collectors.groupingBy(Role::getAge, LinkedHashMap::new, Collectors.toList()));
filter
主要是流的过滤
只要姓张的人
Stream<String> stream2 = stream.filter(name-> name.startsWith("张"));
sorted
排序
//年龄升序,相同年龄身高升序
List<Integer> ascList = newList.stream()
.sorted(Comparator.comparingInt(User::getAge).thenComparing(User::getHeight))