集合中stream流的常用方法和操作
装换元素-map()
将流中的每个元素按照给定的转换规则进行转换-返回一个新的流
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
//s表示进来的每一个元素 需要Function<? super T, ? extends R> mapper类型的 new 1个这个就可以
Stream<Object> stream1 = names.stream().map(new Function<String, Object>() {
@Override
public Object apply(String s) {
return s.length();
}
});
// o1表示每一个元素 o1是方法参数 5 3 7返回长度
stream1.forEach(o1 -> System.out.println(o1));
查找第一个元素–findFirst()
String[] strs = {"aaa","bbb","ccc"};
//查找第一个元素--findFirst Stream.of(里面可传任何东西)
Optional<String> first = Stream.of(strs).findFirst();
System.out.println("获取第一个元素"+first.get());
排序–sorted()
1 自然升序 降序排序
// 降序
Stream<Dictory> sorted = collectDown.stream().sorted(Comparator.reverseOrder());
Stream<Dictory> sorted2 = collectDown.stream().sorted();
2 单字段排序
ArrayList<Dictory> arrayList1 = new ArrayList<>();
Dictory dictory = new Dictory();
Dictory dictory1 = new Dictory();
dictory1.setId(2);
dictory1.setStation("2站");
dictory1.setCreate_by("岳鹏程");
dictory.setId(1);
dictory.setStation("1站");
dictory.setCreate_by("岳鹏程");
arrayList1.add(dictory);
arrayList1.add(dictory1);
List<Dictory> collect = arrayList1.stream().sorted(Comparator.comparing(Dictory::getId)).collect(Collectors.toList());
collect.forEach(new Consumer<Dictory>() {
@Override
public void accept(Dictory dictory) {
System.out.println("升序排序"+dictory);
}
});
// 降序排序
List<Dictory> collectDown = arrayList1.stream().sorted(Comparator.comparing(Dictory::getId,Comparator.reverseOrder())).collect(Collectors.toList());
collectDown.forEach(new Consumer<Dictory>() {
@Override
public void accept(Dictory dictory) {
System.out.println("降序排序"+dictory);
}
});
3 多字段排序
按照id和delete_flag排序
ArrayList<Dictory> arrayList2 = new ArrayList<>();
List<Dictory> collect1 = arrayList2.stream().sorted(Comparator.comparing(Dictory::getId).thenComparing(Dictory::getDelete_flag)).collect(Collectors.toList());
4 排序字段空值的报错处理
特殊情况:该属性有为 null 的情况会报错 可以通过加上一个nullsLast限制 来解决
ArrayList<Dictory> arrayList2 = new ArrayList<>();
List<Dictory> collect6 =arrayList2.stream().sorted(Comparator.comparing(Dictory::getId,Comparator.nullsLast(Integer::compareTo))).collect(Collectors.toList());
5 collect方法 收集结果
收集到一个list集合中
List<Dictory> collect = arrayList.stream().filter(new Predicate<Dictory>() {
@Override
public boolean test(Dictory dictory) {
String create = dictory.getCreate_by();
if (create.equals("岳鹏程")) {
return true;
}
return false;
}
}).collect(Collectors.toList());
System.out.println(collect); //返回2个对象 list集合中
5 过滤–filter()
Dictory dictory = new Dictory();
Dictory dictory1 = new Dictory();
dictory1.setId(2);
dictory1.setStation("2站");
dictory1.setCreate_by("岳鹏程");
dictory.setId(1);
dictory.setStation("1站");
dictory.setCreate_by("岳鹏程");
ArrayList<Dictory> arrayList = new ArrayList<>();
arrayList.add(dictory);
arrayList.add(dictory1);
ArrayList<Object> arrayList1 = new ArrayList<>();
// 返回集合中第一个元素
Object o = arrayList.stream().filter(new Predicate<Dictory>() {
@Override
public boolean test(Dictory dictory) {
int id = dictory.getId();
if (id == 1) {
return true; //id=1的实体类过滤出来了
}
return false;
}
}).findFirst(); //走到findFirst才会进入方法中
System.out.println(o); //是实体类可转
6 skip()-跳过流中的前n个元素,返回一个新流
List<Integer> list11 = Arrays.asList(1, 2, 3, 4);
Stream<Integer> skip = list11.stream().skip(2);
skip.forEach(System.out::println); // 3 4