Java8新特性Lambda表达式的一些复杂用法总结

 更新时间:2017年07月16日 09:04:04   作者:四号程序员  
lambda表达式是JAVA8中提供的一种新的特性,它支持Java也能进行简单的“函数式编程”。 下面这篇文章主要给大家介绍了关于Java8新特性Lambda表达式的一些复杂用法的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。

简介

lambda表达式是JAVA8中提供的一种新的特性,它支持Java也能进行简单的“函数式编程”。

它是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。

本文将介绍关于Java8 Lambda表达式的一些复杂用法,分享出来供大家参考学习,下面来一起看看详细的介绍:

复杂用法实例

传入数组ids,在list<Obj>上操作,找出Obj中id想匹配的,并且按照id进行collect成map(这里假设找出来的按照id不重复)

@Override
public Map<Integer, MyObj> getOperationByShipmentIds(Collection<Integer> ids) {
 return storage
   .stream()
   .filter(op -> ids.contains(op.getId()))
   .collect(Collectors.toMap(MyObj::getId, Function.identity()));
}

接上面的,假设id可以重复:

@Override
public Map<Integer, MyObj> getOperationByShipmentIds(Collection<Integer> ids) {
 return storage
   .stream()
   .filter(op -> ids.contains(op.getId()))
   .collect(Collectors.groupingBy(MyObj::getId));
}

对象列表某一列求和

list.values().stream().mapToInt(obj -> obj.getIntField()).sum();

多个list追加到同一个中

List<MyObject> list = services.stream()
        .flatMap(s -> s.getObjects().stream())
        .collect(Collectors.toList());

类似wordCount计数

import java.util.*;
import java.util.stream.*;
 
class Test {
 public static void main(String[] args) {
  List<String> list = new ArrayList<>();
 
  list.add("Hello");
  list.add("Hello");
  list.add("World");
 
  Map<String, Long> counted = list.stream()
   .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
 
  System.out.println(counted);
 }
}

使用Lambda实现分段chunk

AtomicInteger counter = new AtomicInteger();
 
stream.collect(groupingBy(x->counter.getAndIncrement()/chunkSize))
 .values()
 .forEach(database::flushChunk);

跑个题,上面的那个也可以用apache commons搞定

ListUtils.partition(list, batchSize)

总结

以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Java常见的四种负载均衡算法

    Java常见的四种负载均衡算法

    本文主要介绍了Java常见的四种负载均衡算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Spring Cloud中使用Feign,@RequestBody无法继承的解决方案

    Spring Cloud中使用Feign,@RequestBody无法继承的解决方案

    这篇文章主要介绍了Spring Cloud中使用Feign,@RequestBody无法继承的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Spring整合Springmvc的相关介绍

    Spring整合Springmvc的相关介绍

    今天小编就为大家分享一篇关于Spring整合Springmvc的相关介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • hibernate存取json数据的代码分析

    hibernate存取json数据的代码分析

    这篇文章主要介绍了hibernate存取json数据的代码分析,需要的朋友可以参考下
    2017-09-09
  • 一文搞懂spring boot本地事务@Transactional参数

    一文搞懂spring boot本地事务@Transactional参数

    这篇文章主要介绍了spring boot本地事务@Transactional参数详解,本文通过示例代码图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • spring cloud-zuul的Filter使用详解

    spring cloud-zuul的Filter使用详解

    这篇文章主要介绍了spring cloud-zuul的Filter使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Java分支结构和循环结构原理与用法详解

    Java分支结构和循环结构原理与用法详解

    这篇文章主要介绍了Java分支结构和循环结构原理与用法,结合实例形式分析了java分支结构、循环结构、跳转语句等相关概念、原理、使用技巧与操作注意事项,需要的朋友可以参考下
    2020-02-02
  • 解决springboot 多线程使用MultipartFile读取excel文件内容报错问题

    解决springboot 多线程使用MultipartFile读取excel文件内容报错问题

    这篇文章主要介绍了解决springboot 多线程使用MultipartFile读取excel文件内容报错问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Spring配置文件无法读取properties属性的解决

    Spring配置文件无法读取properties属性的解决

    这篇文章主要介绍了Spring配置文件无法读取properties属性的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java的Semaphore信号量使用及原理解读

    Java的Semaphore信号量使用及原理解读

    这篇文章主要介绍了Java的Semaphore信号量使用及原理解读,Semaphore(信号量)是Java中一个并发控制工具,用于控制对共享资源的访问,它基于计数器的原理,可以限制同时访问某个资源的线程数量,需要的朋友可以参考下
    2023-12-12

最新评论