有且仅有一个未实现的非静态方法的接口叫做“函数式接口”
interface IFactory<T> {
T create();
}
Stream.of(arrays[1], 2, "string")
//初始值为 0,执行 +1 操作
Stream.iterate(0, n -> n + 1).limit(10)
//流中构造 10 个随机数
Stream.generate(() -> Math.random()).limit(10)
List<UserDTO> userDTO = userList.stream()
.map(user -> UserDTO.builder()
.name(user.getName())
.mobile(user.getMobile())
.build()
)
.collect(Collectors.toList());
peek:对元素的属性进行操作,常用于debug展示流过程输出
.peek(user -> log.debug("user {}", user))
findAny:在 parallelStream() 中使用,寻找满足条件的任一元素 findFirst:寻找满足条件的第一个元素
Map<Long, User> userMap = userList.stream()
.collect(Collectors.toMap(User::getId, user -> user));
核心作用:进行流处理时,比如 filter 过滤之后可能没有符合条件的元素,流已经为 NULL,这种情况下就可以使用 Optional 流作为返回对象,保证后续流操作能正常执行,不报错。 常用方法 isPresent():如果不为空返回 true isEmpty():如果为空返回 true get():如果 Optional 有值则将其返回,否则抛异常 以下三个方法可以用来 Optional 转 List,如:
.ifPresent(Collections.toList())
orElse():当 Optional 为空,可以给定一个默认值, ifPresent():当流不为空时,执行该函数里的代码块,如 ifPresentOrElse(a -> {a++}, () -> {log.debug("空")}):当流不为空时,执行前面的代码块,为空时执行后面的代码块
toSet() toMap()
Map<Long, User> userMap = userList.stream()
.collect(Collectors.toMap(User::getId, user -> user));
toList() toCollection()
averagingDouble():求平均值 summingInt():求和 summarizingDouble():DoubleSummaryStatistics 配合使用,可对其进行各种聚合操作(getAverage()、getCount()、getMax()、getMin()、getSum())
double avg = userList.stream().collect(Collectors.averagingDouble(User::getAge));
DoubleSummaryStatistics stat = userList.stream().collect(Collectors.summarizingDouble(User::getAge));
double avg = stat.getAverage();
Long count = stat.getCount();
groupingBy(groupCondition, mapValue):分组
//按年龄分组
Map<Integer, List<User>> groupUser = userList.stream().collect(Collectors.groupingBy(user -> (int)Math.floor(user.getAge() / 10)));
//统计不同年龄阶段的各聚合值
Map<Integer, DoubleSummaryStatistics> groupUser = userList.stream().collect(Collectors.groupingBy(user -> (int)Math.floor(user.getAge() / 10),
summarizingDouble(User::getAge)));
//分组映射
Map<Integer, List<UserDto>> result = userList.stream().collect(
Collectors.groupingBy(
user -> (int)Math.floor(user.getAge() / 10),
Collectors.mapping(
user -> new UserDto(
user.getId(), user.getUserName()
),
Collectors.toList()
)
)
);
mapping(value, 下游链或者Collectors.toList()等集合)
List<String> strings = List.of("bb", "ddd", "cc", "a");
Map<Integer, TreeSet<String>> result = strings.stream().collect(groupingBy(
String::length,
mapping(
String::toUpperCase,
filtering(
s -> s.length() > 1,
toCollection(TreeSet::new)
)
)
));
sorted()
//默认对简单类型升序排列
List<String> sort = list.stream().sorted().collect(toList());
//简单类型自定义排列
List<String> sort = list.stream().sorted(
(a,b) -> a.compareTo(b))
.collect(toList());
//对简单类型降序排列
List<String> sort = list.stream().sorted(
Comparator.reverseOrder())
.collect(toList());
//取对象中某个属性自定义排序
List<String> sort = userList.stream().sorted(
Comparator.comparing(
user -> user.getId(),
(a, b) -> a.compareTo(b)
)
)
.collect(toList());
List<String> sort = userList.stream().sorted(
(a, b) -> a.getUserName().compareTo(b.getUserName())
)
.collect(toList());
父子对象常见的集合属性(如:List 的 Student 对象下面存在 List)
List<Course> courseList = studentList.stream().flatMap(
student -> student.getCourseList().stream())
.collect(toList());
过滤Optional<>流中的空值对象,剩下的都是有值的Opitonal<>对象
.flatMap(Optional::stream)
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。