java collectors用法
Java Collectors用法
1. 简介
Java Collectors是Java 8引入的一个工具类,用于对Stream进行汇总操作。它提供了各种用于收集流元素的方法,可以生成各种类型的结果集,如List、Set、Map等。
2. 基本用法
以下是Collectors的几个基本方法:
•toList():将流中的元素收集到一个List中。
•toSet():将流中的元素收集到一个Set中,去除重复元素。
•toCollection(collectionFactory):将流中的元素收集到指定类型的集合中,如ArrayList、LinkedList等。
•joining():将流中的字符串元素连接成一个字符串。
3. 统计元素数量
•counting():返回流中元素的数量。
long count = ()
.collect(());
("元素数量:" + count);
4. 汇总操作
•summingInt(ToIntFunction mapper):对流中元素进行求和。
int sum = ()
.collect((Integer::intValue));
("元素求和:" + sum);
•averagingInt(ToIntFunction mapper):对流中元素进行求平均值。
double average = ()
.collect((Integer::intValue));
("元素平均值:" + average);
5. 分组操作
•groupingBy(classifier):将流中的元素按照指定的分类器进行分组。
Map<Integer, List<String>> groups = ()
.collect((String::length));
("按长度分组:" + groups);
•partitioningBy(predicate):将流中的元素按照指定的条件进行分区。
Map<Boolean, List<Integer>> partitions = ()
.collect((num -> num > 5));
("大于5的数和小于等于5的数分区:" + partitions);
6. 转换操作
•mapping(mapper, downstream):对流中元素进行转换,并将结果集合进行可选的收集操作。
List<String> result = ()
.collect((str -> str + "! ", ()));
("转换结果:" + result);
7. 组合收集器
•collectingAndThen(downstream, finisher):将一个收集器的结果进行进一步处理。
String result = ()
.collect(((", "), str -> "[" + str + java arraylist用法"]"));
("组合收集器结果:" + result);
以上是一些Java Collectors的常用用法及详细讲解,通过Collectors的强大功能,我们可以更轻松地对流中的元素进行处理和统计,提高开发效率。
8. 自定义收集器
除了Collectors提供的常用工具方法外,我们也可以自定义收集器来满足特定的需求。实现自定义收集器需要实现Collector接口,并重写其中的方法。
以下是一个自定义收集器的示例,将流中的字符串按照长度进行分组,并返回一个长度为5的List:
public class LengthGroupingCollector implements Collector<String, Map<Integer, List<String>>, List<String>> {
@Override
public Supplier<Map<Integer, List<String>>> supplier() {
return HashMap::new;
}
@Override
public BiConsumer<Map<Integer, List<String>>, String> accumulator() {
return (map, str) -> {
int length = ();
List<String> list = (length, k -> new ArrayList<>());
(str);
};
}
@Override
public BinaryOperator<Map<Integer, List<String>>> combiner() {
return (map1, map2) -> {
((key, value) -> (key, value, (list1, list2) -> {
(list2);
return list1;
}));
return map1;
};
}
@Override
public Function<Map<Integer, List<String>>, List<String>> finisher() {
return map -> ().stream()
.max((::getKey))
.map(::getValue)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论