爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      Java 8为什么需要Lambda表达式

      首页 知识中心 软件开发 文章详情页

      Java 8为什么需要Lambda表达式

      2023-04-24 11:26:40 阅读次数:484

      java8,lambda

      函数编程在C#、Python、JavaScript中都得到充分体现。而Java直到最新的Java 8才开始正式支持函数编程,最明显的改进就是对Lamba表达式的支持。正如C#之父Anders Hejlsberg在那篇文章 编程语言大趋势 中所讲,未来的编程语言将逐渐融合各自的特性,而不存在单纯的声明式语言(如之前的Java)或者单纯的函数编程语言。将来声明式编程语言借鉴函数编程思想,函数编程语言融合声明式编程特性...这几乎是一种必然趋势。如下图所示:

      Java 8为什么需要Lambda表达式 

      影响力较大的三个趋势

      那具体而言我们为什么需要Lambda表达式呢?难道Java的OO和命令式编程(imperative programming)特性不够强大吗?下面让我们来分析下其原因。

      1、内部循环和外部循环

      先看一个大家耳熟能详的例子:

      1. List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);  
      2.  
      3. for (int number : numbers) {  
      4.     System.out.println(number);  
      5. } 

      是不是很常见呢?这个叫外部循环(External Iteration)。但是外部循环有什么问题呢?简单来说存在下面三个缺点:

      1.只能顺序处理List中的元素(process one by one)

      2.不能充分利用多核CPU

      3.不利于编译器优化

      而如果利用内部循环,代码写成下面这样:

      1. List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);  
      2.  
      3. numbers.forEach((Integer value) -> System.out.println(value)); 

      这样就能规避上面的三个问题:

      1.不一定需要顺序处理List中的元素,顺序可以不确定

      2.可以并行处理,充分利用多核CPU的优势

      3.有利于JIT编译器对代码进行优化

      类似的C#从4.0版本开始也支持集合元素并行处理,代码如下:

      1. List<int> nums = new List<int> { 1, 2, 3, 4, 5, 6 };  
      2. Parallel.ForEach(nums, (value) =>  
      3. {  
      4.    Console.WriteLine(value);  
      5. }); 

       

      2、传递行为,而不仅仅是传值

      如果你使用C#有一段时间的话,那么你很可能已经明白这个标题的意思了。在C#中,经常看到一些函数的参数是Action或者Func类型,比如下面这个:

      1. public class ArticleDac {  
      2.    ...  
      3.    public Article GetArticles(Func<IDbSet<Article>, Article> func)   // 这里传递的就是行为  
      4.    {  
      5.       using(var db = xx) {  
      6.          return func(db.Articles);  
      7.       }    
      8.    }  
      9.    ...  
      10. }  
      11. // 下面是调用  
      12. int articleId = 119;  
      13. var firstArticle = new ArticleDac().GetArticles(  
      14.     articleDbSet =>  
      15.     articleDbSet.AsQueryable().FirstOrDefault(x => x.id == articleId)  
      16. ); 

      看不懂?没关系。我们先来看一个体现传值局限性的场景吧,上代码:

      1. List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);  
      2.  
      3. public int sumAll(List<Integer> numbers) {  
      4.     int total = 0;  
      5.     for (int number : numbers) {  
      6.         total += number;  
      7.     }  
      8.     return total;  
      9. } 

      sumAll算法很简单,完成的是将List中所有元素相加。某一天如果我们需要增加一个对List中所有偶数求和的方法sumAllEven,如下:

      1. public int sumAllEven(List<Integer> numbers) {  
      2.     int total = 0;  
      3.     for (int number : numbers) {  
      4.         if (number % 2 == 0) {  
      5.             total += number;  
      6.         }  
      7.     }  
      8.     return total;  
      9. } 

      又有一天,我们需要增加第三个方法:对List中所有大于3的元素求和,那是不是继续加下面的方法呢? 

      1. public int sumAllEven(List<Integer> numbers) {  
      2.     int total = 0;  
      3.     for (int number : numbers) {  
      4.         if (number > 3) {  
      5.             total += number;  
      6.         }  
      7.     }  
      8.     return total;  
      9. } 

      比较这三个方法,我们发现了一个很明显的“代码臭味”—— 代码重复(详情参考《重构》),三个方法的唯一区别在于if判断这一行代码。如果脱离这里的上下文,我们会怎么做呢?我首先会先想到利用策略模式重构代码如下:

      1. public interface Strategy {  
      2.    public boolean test(int num);  
      3. }  
      4.  
      5. public class SumAllStrategy implements Strategy {  
      6.    public boolean test(int num) {  
      7.       return true;  
      8.    }  
      9. }  
      10.  
      11. public class SumAllEvenStrategy implements Strategy {  
      12.    public boolean test(int num) {  
      13.       return num % 2 == 0;  
      14.    }  
      15. }  
      16.  
      17. public class ContextClass {  
      18.    private Strategy stragegy = null;  
      19.    private final static Strategy DEFAULT_STRATEGY = new SumAllStrategy();  
      20.  
      21.    public ContextClass() {  
      22.       this(null);  
      23.    }  
      24.  
      25.    public ContextClass(Stragegy stragegy) {  
      26.       if(strategy != null) {  
      27.          this.strategy = strategy;   
      28.       }  
      29.       else {  
      30.          this.strategy = DEFAULT_STRATEGY;  
      31.       }  
      32.    }  
      33.  
      34.    public int sumAll(List<Integer> numbers) {  
      35.       int total = 0;  
      36.       for (int number : numbers) {  
      37.          if (strategy.test(number)) {  
      38.             total += number;  
      39.          }  
      40.       }  
      41.  
      42.       return total;  
      43.    }  
      44. }  
      45.  
      46.  
      47. // 调用  
      48. ContextClass context = new ContextClass();  
      49. context.sumAll(numbers); 

      设计模式在这里发挥了作用,OO特性还是蛮强大的!但这是唯一的解决方案吗(当然不考虑用其他设计模式来解决,因为都是OO范畴!)?当然有,该轮到Java 8 Lambda表达式中的谓词(Predicate)发挥作用了!

      1. public int sumAll(List<Integer> numbers, Predicate<Integer> p) {  
      2.     int total = 0;  
      3.     for (int number : numbers) {  
      4.         if (p.test(number)) {  
      5.             total += number;  
      6.         }  
      7.     }  
      8.     return total;  
      9. }  
      10.  
      11. sumAll(numbers, n -> true);  
      12. sumAll(numbers, n -> n % 2 == 0);  
      13. sumAll(numbers, n -> n > 3); 

      代码是不是比上面简洁很多了?语义应该也很明确,就不多解释了。从这里也可以看出未引入Lambda表达式之前的Java代码的冗长(Java这点被很多人诟病)。

      当然C#早已经支持这种用法,用C#改写上面的代码如下:

      1. public int SumAll(IEnumerable<int> numbers, Predicate<int> predicate) {       
      2.    return numbers.Where(i => predicate(i)).Sum();   
      3. }   
      4.  
      5. SumAll(numbers, n => true);  
      6. SumAll(numbers, n => n % 2 == 0);  
      7. SumAll(numbers, n => n > 3); 

       

      3、Consumer与Loan Pattern

      比如我们有一个资源类Resource:

      1. public class Resource {  
      2.  
      3.     public Resource() {  
      4.         System.out.println("Opening resource");  
      5.     }  
      6.  
      7.     public void operate() {  
      8.         System.out.println("Operating on resource");  
      9.     }  
      10.  
      11.     public void dispose() {  
      12.         System.out.println("Disposing resource");  
      13.     }  
      14. } 

      我们必须这样调用:

      1. Resource resource = new Resource();  
      2. try {  
      3.     resource.operate();  
      4. } finally {  
      5.     resource.dispose();  
      6. } 

      因为对资源对象resource执行operate方法时可能抛出RuntimeException,所以需要在finally语句块中释放资源,防止可能的内存泄漏。

      但是有一个问题,如果很多地方都要用到这个资源,那么就存在很多段类似这样的代码,这很明显违反了DRY(Don't Repeat Yourself)原则。而且如果某位程序员由于某些原因忘了用try/finally处理资源,那么很可能导致内存泄漏。那咋办呢?Java 8提供了一个Consumer接口,代码改写为如下:

      1. public class Resource {  
      2.  
      3.     private Resource() {  
      4.         System.out.println("Opening resource");  
      5.     }  
      6.  
      7.     public void operate() {  
      8.         System.out.println("Operating on resource");  
      9.     }  
      10.  
      11.     public void dispose() {  
      12.         System.out.println("Disposing resource");  
      13.     }  
      14.  
      15.     public static void withResource(Consumer<Resource> consumer) {  
      16.         Resource resource = new Resource();  
      17.         try {  
      18.             consumer.accept(resource);  
      19.         } finally {  
      20.             resource.dispose();  
      21.         }  
      22.     }  
      23. } 

      调用代码如下:

      1. Resource.withResource(resource -> resource.operate()); 

      外部要访问Resource不能通过它的构造函数了(private),只能通过withResource方法了,这样代码清爽多了,而且也完全杜绝了因人为疏忽而导致的潜在内存泄漏。

       

      4、stream+laziness => efficiency

      像之前一样先来一段非常简单的代码: 

      1. List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);  
      2.  
      3. for (int number : numbers) {  
      4.     if (number % 2 == 0) {  
      5.         int n2 = number * 2;  
      6.         if (n2 > 5) {  
      7.             System.out.println(n2);  
      8.             break;  
      9.         }  
      10.     }  
      11. } 

      这段代码有什么问题? 没错,可读性非常差。第一步,我们利用《重构》一书中的最基础的提取小函数重构手法来重构代码如下:

      1. public boolean isEven(int number) {  
      2.     return number % 2 == 0;  
      3. }  
      4.  
      5. public int doubleIt(int number) {  
      6.     return number * 2;  
      7. }  
      8.  
      9. public boolean isGreaterThan5(int number) {  
      10.     return number > 5;  
      11. }  
      12.  
      13. for (int number : numbers) {  
      14.     if (isEven(number)) {  
      15.         int n2 = doubleIt(number);  
      16.         if (isGreaterThan5(n2)) {  
      17.             System.out.println(n2);  
      18.             break;  
      19.         }  
      20.     }  
      21. } 

      OK,代码的意图清晰多了,但是可读性仍然欠佳,因为循环内嵌套一个if分支,if分支内又嵌套另外一个分支,于是继续重构代码如下:

      1. public boolean isEven(int number) {  
      2.     return number % 2 == 0;  
      3. }  
      4.  
      5. public int doubleIt(int number) {  
      6.     return number * 2;  
      7. }  
      8.  
      9. public boolean isGreaterThan5(int number) {  
      10.     return number > 5;  
      11. }  
      12.  
      13. List<Integer> l1 = new ArrayList<Integer>();  
      14. for (int n : numbers) {  
      15.     if (isEven(n)) l1.add(n);  
      16. }  
      17.  
      18. List<Integer> l2 = new ArrayList<Integer>();  
      19. for (int n : l1) {  
      20.     l2.add(doubleIt(n));  
      21. }  
      22.  
      23. List<Integer> l3 = new ArrayList<Integer>();  
      24. for (int n : l2) {  
      25.     if (isGreaterThan5(n)) l3.add(n);  
      26. }  
      27.  
      28. System.out.println(l3.get(0)); 

      现在代码够清晰了,这是典型的“流水线”风格代码。但是等等,现在的代码执行会占用更多空间(三个List)和时间,我们来分析下。首先第二版代码的执行流程是这样的:

      1. isEven: 1  
      2. isEven: 2  
      3. doubleIt: 2  
      4. isGreaterThan5: 2  
      5. isEven: 3  
      6. isEven: 4  
      7. doubleIt: 4  
      8. isGreaterThan5: 4  
      9. 8 

      而我们的第三版代码的执行流程是这样的:

      1. isEven: 1 
      2. isEven: 2 
      3. isEven: 3 
      4. isEven: 4 
      5. isEven: 5 
      6. isEven: 6 
      7. doubleIt: 2 
      8. doubleIt: 4 
      9. doubleIt: 6 
      10. isGreaterThan5: 2 
      11. isGreaterThan5: 4 
      12. isGreaterThan5: 6 
      13. 8 

      步骤数是13:9,所以有时候重构得到可读性强的代码可能会牺牲一些运行效率(但是一切都得实际衡量之后才能确定)。那么有没有“三全其美”的实现方法呢?即:

      1.代码可读性强

      2.代码执行效率不比第一版代码差

      3.空间消耗小

      Streams come to rescue! Java 8提供了stream方法,我们可以通过对任何集合对象调用stream()方法获得Stream对象,Stream对象有别于Collections的几点如下:

      1.不存储值:Streams不会存储值,它们从某个数据结构的流水线型操作中获取值(“酒肉穿肠过”)

      2.天生的函数编程特性:对Stream对象操作能得到一个结果,但是不会修改原始数据结构

      3.Laziness-seeking(延迟搜索):Stream的很多操作如filter、map、sort和duplicate removal(去重)可以延迟实现,意思是我们只要检查到满足要求的元素就可以返回

      4.可选边界:Streams允许Client取足够多的元素直到满足某个条件为止。而Collections不能这么做

      上代码:

      1. System.out.println(  
      2.     numbers.stream()  
      3.             .filter(Lazy::isEven)  
      4.             .map(Lazy::doubleIt)  
      5.             .filter(Lazy::isGreaterThan5)  
      6.             .findFirst()  
      7. ); 

      现在的执行流程是:

      1. isEven: 1 
      2. isEven: 2 
      3. doubleIt: 2 
      4. isGreaterThan5: 4 
      5. isEven: 3 
      6. isEven: 4 
      7. doubleIt: 4 
      8. isGreaterThan5: 8 
      9. IntOptional[8] 

      流程基本和第二版代码一致,这归功于Laziness-seeking特性。怎么理解呢?让我来构造下面这个场景:

      1. Stream流对象要经过下面这种流水线式处理:  
      2. 过滤出偶数 => 乘以2 => 过滤出大于5的数 => 取出第一个数  
      3.  
      4. 注意:=> 左边的输出是右边的输入 

      而Laziness-seeking意味着 我们在每一步只要一找到满足条件的数字,马上传递给下一步去处理并且暂停当前步骤。比如先判断1是否偶数,显然不是;继续判断2是否偶数,是偶数;好,暂停过滤偶数操作,将2传递给下一步乘以2,得到4;4继续传递给第三步,4不满足大于5,所以折回第一步;判断3是否偶数,不是;判断4是否偶数,是偶数;4传递给第二步,乘以2得到8;8传递给第三步,8大于5;所以传递给最后一步,直接取出得到 IntOptional[8]。

      IntOptional[8]只是简单包装了下返回的结果,这样有什么好处呢?如果你接触过Null Object Pattern的话就知道了,这样可以避免无谓的null检测。

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.csdn.net/youzhouliu/article/details/51816315,作者:youzhouliu,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:Python魔法方法(12):__getattr __(self, item) 方法

      下一篇:路由器子接口及VLAN配置

      相关文章

      2025-05-14 10:07:38

      30天拿下Python之函数

      在Python中,函数是一段可以重复使用的代码块,它可以提高代码的可重用性和可维护性,是编程中非常重要的概念。

      2025-05-14 10:07:38
      lambda , 代码 , 传递 , 关键字 , 函数 , 参数 , 定义
      2025-05-06 09:19:51

      函数模板 函数参数

      函数模板 函数参数

      2025-05-06 09:19:51
      lambda , 函数 , 函数指针 , 定义 , 模板
      2025-04-14 09:27:25

      【C++11】lambda表达式

      随着 C++11 的发布,C++ 标准引入了许多新特性,使语言更加现代化,开发者编写的代码也变得更加简洁和易于维护。Lambda 表达式是其中一个重要的特性,它提供了一种方便的方式来定义匿名函数,这在函数式编程范式中非常常见。Lambda 表达式允许我们在函数内部定义小型的无名函数,减少了不必要的函数定义和代码冗余,是现代 C++ 开发的重要工具。

      2025-04-14 09:27:25
      C++ , lambda , Lambda , 变量 , 捕获
      2025-03-17 08:48:47

      算法探索_多序列合并去重

      算法探索_多序列合并去重

      2025-03-17 08:48:47
      lambda , 合并 , 测试代码 , 耗时
      2025-03-05 09:24:43

      【Python】练习题——函数相关(lambda表达式和filter、sum函数、递归)

      【Python】练习题——函数相关(lambda表达式和filter、sum函数、递归)

      2025-03-05 09:24:43
      filter , lambda , 函数 , 列表 , 递归
      2025-02-10 08:56:02

      【C++11】lambda函数及其基本用法

      【C++11】lambda函数及其基本用法

      2025-02-10 08:56:02
      amp , lambda , 函数 , 列表 , 变量 , 捕获 , 表达式
      2025-01-17 09:05:56

      BFS:边权相同的最短路问题

      BFS:边权相同的最短路问题

      2025-01-17 09:05:56
      bfs , lambda , LeetCode , map , sort , vector , 力扣
      2025-01-16 09:30:08

      恕我直言你可能真的不会java第3篇:Stream的Filter与谓词逻辑

      恕我直言你可能真的不会java第3篇:Stream的Filter与谓词逻辑

      2025-01-16 09:30:08
      filter , lambda , 代码 , 输出 , 逻辑
      2024-12-02 09:45:53

      Java中的lambda表达式与Stream API:高效的函数式编程

      lambda表达式是Java 8引入的一项重要特性,它允许将函数作为方法的参数传递给其他方法,或者将代码像数据一样进行传递。lambda表达式的引入使得Java编程更加灵活和简洁。

      2024-12-02 09:45:53
      API , lambda , Stream
      2024-11-20 06:55:59

      Lambda 表达式与C++并发编程

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

      2024-11-20 06:55:59
      lambda , 函数 , 表达式
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5239324

      查看更多

      最新文章

      30天拿下Python之函数

      2025-05-14 10:07:38

      【C++11】lambda表达式

      2025-04-14 09:27:25

      算法探索_多序列合并去重

      2025-03-17 08:48:47

      【Python】练习题——函数相关(lambda表达式和filter、sum函数、递归)

      2025-03-05 09:24:43

      【C++11】lambda函数及其基本用法

      2025-02-10 08:56:02

      恕我直言你可能真的不会java第3篇:Stream的Filter与谓词逻辑

      2025-01-16 09:30:08

      查看更多

      热门文章

      Java8中时间日期库的20个常用使用示例

      2024-09-24 06:30:46

      Java中的类型推断和lambda表达式

      2023-03-22 09:03:11

      简单了解 Python 匿名函数:lambda

      2023-04-07 06:43:38

      Python----map,filter,reduce,zip,lambda的使用方法

      2023-04-28 02:17:08

      JDK8——使用lambda编程

      2023-04-21 02:59:53

      Python编程:内置高阶函数

      2023-05-23 09:26:42

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      【C++11】lambda表达式 | 包装器

      Python编程:内置高阶函数

      Lambda 表达式与C++并发编程

      简单了解 Python 匿名函数:lambda

      恕我直言你可能真的不会java第3篇:Stream的Filter与谓词逻辑

      【C++11】lambda表达式

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号