Java Stream流
2020-12-18 18:48:09 71 举报
Java Stream流
作者其他创作
大纲/内容
聚合:max、min、count
分组是按字段值分,分区是按给定条件分
文件
功能:生产消息参数:None返回类型:T
accept(T t)
joining()
Function
收集:collect
筛选:filter
filter(person -> person.getAge() == 20)保留boolean为true的元素
JDK9新增or() 如果对象不为空返回对象,如果为空则返回or()方法中预设的值ifPresentOrElse() 一个 Consumer 和一个 Runnable。如果对象不为空,会执行 Consumer 的动作,否则运行 Runnable。相比ifPresent()多了OrElse判断stream() 将Optional转换成stream,如果有值就返回包含值的stream,如果没值,就返回空的stream
filter(T -> boolean)
map(T -> R)
distinct()
stream()
counting()
输出
T apply(T t)
功能:二元操作参数:(T,T)返回类型:(T)
生成一个字符串流Stream<String> stream =Stream.of(\"aaa\
返回一特定类型的计算结果
OptionalDouble average = list.stream().mapToInt(Person::getAge).average();
String s = list.stream().map(Person::getName).collect(Collectors.joining());结果:jackmiketomString s = list.stream().map(Person::getName).collect(Collectors.joining(\
提取与组合
处理
int sum = list.stream().collect(summingInt(Person::getAge));
终端操作
skip(2)
flatMap(Arrays::stream)
值Stream.of(T...)
功能:将T映射为R(转换功能)参数:T返回类型:R
long i = list.stream().collect(counting());
flatMap(T -> Stream<R>)
allMatch(T -> boolean)noneMatch(T -> boolean)
IntSummaryStatistics i = list.stream().collect(summarizingInt(Person::getAge));
数值流mapToInt(T -> InstStream)mapToDouble(T -> DoubleStream)mapToLong(T -> LongStream)
用在limit(n)前面时,先去除前m个元素再返回剩余元素的前n个元素limit(n)用在skip(m)前面时,先返回前n个元素再在剩余的n个元素中去除m个元素
Stream
anyMatch(T -> boolean)
去重:distinct()
排序:sorted
groupingBy()
Stream使用
Predicate
limit(long n)
判断是否为空,返回消费函数Optional.ifPresent(Consumer<? super T> consumer)
创建非空对象Optional.of(\"optional\")
限制:limit()
Double average = list.stream().collect(averagingInt(Person::getAge));
为空返回Supplier对象T orElseGet(Supplier<? extends T> other)
生成流
返回Stream流本身
1、map(e -> e.getName())2、map(Person::getName)
函数iterategenerate
Consumer
为空返回异常T orElseThrow(Supplier<? extends X> exceptionSupplier)
收集collect()
对象创建
映射:map、flatMap
遍历:foreach
中间操作
判断是否为空,返回booleanOptional.isPresent()
String s = list.stream().map(Person::getName).collect(Collectors.joining(\" and \
Optional<Person> optional = list.stream().collect(Collectors.maxBy(Comparator.comparing(Person::getAge)));
跳过:skip()
Stream<String> stream = Files.lines(Paths.get(\"data.txt\"));
返回对象Optional.get()
函数式接口
转换成流
输出为流类型
int sum = list.stream().map(Person::getAge).reduce(Integer::sum).get();
test(T t)
long i = list.stream().count();
forEach()
接合:Collectors.joining()
数组Arrays.stream(T[]/int[]/double[]/long[])
limit(2)
parallelStream()
对象进行二次包装Optional.map()
Stream<T> filter(Predicate<? super T> predicate)boolean anyMatch(Predicate<? super T> predicate)boolean allMatch(Predicate<? super T> predicate)boolean noneMatch(Predicate<? super T> predicate)
归约:Collectors.reducing()
数据源 可分解性ArrayList 极佳LinkedList 差IntStream.range 极佳Stream.iterate 差HashSet 好TreeSet 好
判断
count() (-> long)
计算(聚合)
T get()
Stream<T> peek(Consumer<? super T> action)void forEach(Consumer<? super T> action)void forEachOrdered(Consumer<? super T> action)
skip(long n)
分组:Collectors.groupingBy() =>有单级分组和多级分组分区:Collectors.partitioningBy()
归集:Collectors.toList()/toSet()/toMap()Collectors.toCollection()/toConcurrentMap()
Optional 空值处理类
Optional<Person> optional = list.stream().max(Comparator.comparing(Person::getAge));
功能:一元操作参数:T返回类型:T
BinaryOperator
操作
数据源
归约:reduce
sorted():自然排序,流中元素需实现Comparable接口sorted(Comparator com):Comparator排序器自定义排序
findAny() 和 findFirst()
collect 汇总
功能:消费消息参数:T返回类型:void
anyMatch(person -> person.getAge() == 20)
IntStream intStream = list.stream().mapToInt(Person::getAge);
过滤对象filter(Predicate<? super T> predicate)
Supplier
partitioningBy()
匹配:find、match
创建为空或非空对象Optional.ofNullable(null)Optional.ofNullable(\"optional\")
UnaryOperator
过滤/判断
通过类的equals方法类判断两个元素是否相等
创建空对象Optional.empty()
toList()toSet()toCollection()toMap()
getCount()getMax()getMin()getSum()getAverange()
R apply(T t)
为空返回对象T orElse(T other)
统计计数:Collectors.counting()平均值:Collectors.averagingInt()/averagingLong()/averagingDouble()最值:Collectors.maxBy()/maxBy()求和:Collectors.summingInt()/summingLong()/summingDouble()统计以上所有:Collectors.summarizingInt()/summarizingLong()/summarizingDouble()
List<Person>
功能:判断真假参数:T返回类型:boolean
int sum = list.stream().mapToInt(Person::getAge).sum();
0 条评论
下一页