获取流的方式
所有的collection可以通过stream方法获取流。
list集合:list.stream()
set集合:set.stream()
map集合:不能直接转,但可以间接转换
获取键:map.keySet().stream()
获取值:map.values().stream()
获取键值对:map.entrySet().stream()
数组获取流
数组:int[] arr ={1,2,3}
数组转流:Stream.of(arr)
stream流常用方法
- forEach():遍历。终结方法,调用后就不能继续调用stream的其他方法了
list.stream().forEach(s ->sout(s)); - filter():过滤
list.stream().filter( s-> return s.startWith(“张”)); - map:映射,将当前流中的类型数据转换为另一种类型
stream().map(s -> {}) - count():统计个数。终结方法
list.stream().count() - limit():取用前几个
list.stream().limit(3) - skip():跳过前几个
list.stream().skip(3) - concat():把2个流合并
list.stream().concat(stream1,stream2)
8.lamba表达式:
可以将一个函数作为参数传入一个方法,MathOperation addition = (int a, int b) -> a + b;
看个题:
/**
* 题目要求:一分钟内完成此题,只能用一行代码实现!
* 现在有5个用户!筛选:
* 1、ID 必须是偶数
* 2、年龄必须大于23岁
* 3、用户名转为大写字母
* 4、用户名字母倒着排序
* 5、只输出一个用户!
*/
public class Test {
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流
// lambda表达式、链式编程、函数式接口、Stream流式计算
list.stream()
.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);
}
}