Java基础 Stream流的中间方法
sorted ():排序
举例:
sorted ():
ArrayList<Integer> list = new ArrayList<>();
Collections.addAll(list, 1, 6, 5);
list.stream().sorted(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
filter 过滤:
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "张三", "李四", "王五", "赵六");
list.stream().filter(new Predicate<String>() {
@Override
public boolean test(String s) {
// s 依次表示流里面的每一个数据,返回值为 true 表示当前数据留下,如果返回值为 false 表示当前数据舍弃不要
return s.startsWith("张");//返回姓张的人
}
}).forEach(s -> System.out.println(s));
limit 获取前几个元素:
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "张三", "李四", "王五", "赵六");
list.stream().limit(3).forEach(s -> System.out.println(s)); // 返回前三个元素
skip 跳过前几个元素:
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "张三", "李四", "王五", "赵六");
list.stream().skip(3).forEach(s -> System.out.println(s)); // 跳过前三个元素
concat合并两个流的方法尽可能保证 a 和 b 两个流中的数据类型是一致的。如果 a 流里的数据类型是 x,b 流里的数据类型是 y,合并后的类型就是 x 和 y 共同的父类,相当于做了一个类型的提升,提升之后无法使用子类里面的特有功能
Stream.concat(a, b)
map 方法:
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "张三-15", "李四-16", "王五-17", "赵六-18");
// Function 里面有两个泛型,第一个表示流里面原本的数据类型,第二个表示要转成之后的类型
list.stream().map(new Function<String, Integer>() {
@Override
public Integer apply(String s) {
// 形参 s 依次表示流里面的每一个数据,返回值表示转换之后的数据
String[] arr = s.split("-");
String ageString = arr[1];
int age = Integer.parseInt(ageString);
return age;
}
}).forEach(s -> System.out.println(s)); // 打印结果:15 16 17 18