stream流
1.什么是Stream流
它是java8提供的新特性,可以申明式处理集合,提高开发效率,类似一种管道流操作
2.基本操作
2.1 过滤
public class StreamTest {
public static void main(String[] args) {
User a = new User(1, "a");
User b = new User(2, "b");
User c = new User(3, "c");
ArrayList<User> users = new ArrayList<>();
users.add(a);
users.add(b);
users.add(c);
//1.过滤
List<User> collect = users.stream().filter(user -> "a".equals(user.getName())).collect(Collectors.toList());
System.out.println(collect);
}
}
执行结果
2.2 取最值
public class StreamTest {
public static void main(String[] args) {
User a = new User(1, "a");
User b = new User(2, "b");
User c = new User(3, "c");
ArrayList<User> users = new ArrayList<>();
users.add(a);
users.add(b);
users.add(c);
//最大值
Optional<User> max = users.stream().max(Comparator.comparing(User::getId));
//最小值
Optional<User> min = users.stream().min(Comparator.comparing(User::getId));
System.out.println(max);
System.out.println(min);
}
}
运行结果
2.3 排序
升序
public class StreamTest {
public static void main(String[] args) {
User a = new User(1, "a");
User b = new User(2, "b");
User c = new User(4, "c");
User d = new User(3, "d");
ArrayList<User> users = new ArrayList<>();
users.add(a);
users.add(b);
users.add(c);
users.add(d);
//倒序的两种方式
List<User> collect = users.stream().sorted(Comparator.comparing(User::getId, Comparator.reverseOrder())).collect(Collectors.toList());
List<User> collect1 = users.stream().sorted(Comparator.comparing(User::getId).reversed()).collect(Collectors.toList());
//升序(默认升序)
List<User> collect2 = users.stream().sorted(Comparator.comparing(User::getId)).collect(Collectors.toList());
collect.forEach(System.out::println);
collect1.forEach(System.out::println);
collect2.forEach(System.out::println);
}
}
运行结果
2.4抽取属性
public class StreamTest {
public static void main(String[] args) {
User a = new User(1, "a");
User b = new User(2, "b");
User c = new User(4, "c");
User d = new User(3, "d");
ArrayList<User> users = new ArrayList<>();
users.add(a);
users.add(b);
users.add(c);
users.add(d);
List<String> collect = users.stream().map(User::getName).collect(Collectors.toList());
collect.forEach(System.out::println);
}
}
运行结果
2.5 将属性转map
public class StreamTest {
public static void main(String[] args) {
User a = new User(1, "a");
User b = new User(2, "b");
User c = new User(4, "c");
User d = new User(3, "d");
ArrayList<User> users = new ArrayList<>();
users.add(a);
users.add(b);
users.add(c);
users.add(d);
Map<Integer, String> collect = users.stream().collect(Collectors.toMap(User::getId, User::getName, (k1, k2) -> k1));
System.out.println(collect);
}
}
运行结果
去重
public class StreamTest {
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("哈哈");
arrayList.add("哈哈");
arrayList.add("嘻嘻");
arrayList.add("呵呵");
System.out.println(arrayList);
List<String> collect = arrayList.stream().distinct().collect(Collectors.toList());
System.out.println(collect);
}
}
分组统计
Map<String, DoubleSummaryStatistics> distributedAmountMap = extCashFlowDTOList.stream().
filter(e->e.getAmounts()!=null).collect(groupingBy(ExtCashFlowDTO::getName, Collectors.summarizingDouble(e->Double.parseDouble(e.getAmounts().toString()))));