lambda表达式

java8 lambda表达式对集合的处理

試著忘記壹切 提交于 2019-12-23 17:59:13
筛选系列 //从数据库查询出的数据 List<ClassImagePraise> pList = classImagePraiseService.list(lambdaQueryWrapperTow); //把该集合里面每个对象的name筛选出来 List<String> name= list.stream().map(p -> p.getName()).collect(Collectors.toList()); //把该集合里面每个对象的name筛选出来 筛选的条件是 Id等于 333 List<String> teacherIds = pList.stream().filter(s -> s.getId().equals("333")).map(p -> p.getUserId()).collect(Collectors.toList()); //根据集合的sort属性排序 升序 (简写) pList .sort(Comparator.comparing(ClassImagePraise::getSort)); //根据集合的sort属性排序 降序 (简写) pList .sort(Comparator.comparing(ClassImagePraise::getSort).reversed()); 排序系列详细 List<Message> list =

在Java8的foreach()中使用return/break/continue

本小妞迷上赌 提交于 2019-12-09 06:30:19
今天使用lambda表达式处理集合时,发现对return、break以及continue的使用有点迷惑,于是自己动手测试了一下,才发现在使用foreach()处理集合时 不能使用break和continue 这两个方法,也就是说不能按照普通的for循环遍历集合时那样根据条件来中止遍历,而如果要实现在普通for循环中的效果时,可以使用return来达到,也就是说如果你在一个方法的lambda表达式中使用return时,这个方法是不会返回的,而只是执行下一次遍历,看如下的测试代码: List<String> list = Arrays.asList("123", "45634", "7892", "abch", "sdfhrthj", "mvkd"); list.stream().forEach(e ->{ if(e.length() >= 5){ return; } System.out.println(e); }); 上述代码的输出结果是如下图所示: 可以看出 return起到的作用和continue是相同的 。 想知道这是为什么,在 Stack Overflow 中找到一个答案,主要是说foreach()不是一个循环,不是设计为可以用break以及continue来中止的操作。 ---------------------------------------------------

ES6的Lambda表达式

随声附和 提交于 2019-12-08 09:05:37
1、ES5写法 var p1 = document.getElementById( 'test1' ); p1.addEventListener( 'click' , function () { this .style.color = "red" ; }, false ); 2、ES6写法 var p1 = document .getElementById( 'test1' ); p1.addEventListener( 'click' , () => { this .style.color = "red" ; }, false ); 在ES5语法中,this指向其调用着p1; 在ES6语法中,函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。 普通函数中,this对象的指向是可变的; 箭头函数中,this对象的指向是固定的。 this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。 由于箭头函数没有自己的this,所以当然也就不能用call()、apply()、bind()这些方法去改变this的指向。 来源: CSDN 作者: 永远的烟火 链接: https://blog.csdn.net/sinat_27180563/article/details

C++—— Lambda表达式

孤街浪徒 提交于 2019-12-08 07:52:28
写在前面 这是对于C++11中新添加的Lambda表达式的学习总结,截至目前遇到过两次这样的题目。可参考: LeetCode-520. Detect Capital 、 LeetCode-406. Queue Reconstruction by Height 、 LeetCode-155. Min Stack 。 利用Lambda表达式,可以方便的定义和创建匿名函数。对于C++这门语言来说来说,“Lambda表达式”或“匿名函数”这些概念听起来好像很深奥,但很多高级语言在很早以前就已经提供了Lambda表达式的功能,如C#,Python等。今天,我们就来简单介绍一下C++中Lambda表达式的简单使用。隐约感觉这个好像还和函数式编程有关。所以借此机会学习学习。 参考MSDN中的 C++ 中的 Lambda 表达式 、 C++ 11 Lambda表达式 、 C++11 学习笔记 lambda表达式 。有必要说明一下,以上参考都是非常优秀完整的博客,我只是针对其内容进行选择性的整理。只用作个人学习积累。 后续更新 2018-5-14遇到有关Lambda表达式的题目可参考: LeetCode-56. Merge Intervals 声明Lambda表达式 Lambda表达式完整的声明格式如下: [capture list] (params list) mutable exception-

C#基础提升系列——C#委托

荒凉一梦 提交于 2019-12-06 13:55:15
C# 委托 委托是类型安全的类,它定义了返回类型和参数的类型,委托类可以包含一个或多个方法的引用。可以使用lambda表达式实现参数是委托类型的方法。 委托 当需要把一个方法作为参数传递给另一个方法时,就需要使用委托。委托是一种特殊类型的对象,其特殊之处在于,我们以前定义的所有对象都包含数据,而委托包含的只是一个或多个方法的地址。 声明委托类型 声明委托类型就是告诉编译器,这种类型的委托表示的是哪种类型的方法。语法如下: delegate void delegateTypeName[<T>]([参数列表]); 声明委托类型时指定的参数,就是该委托类型引用的方法对应的参数。 //声明一个委托类型 private delegate void IntMethodInvoker(int x); //该委托表示的方法有两个long型参数,返回类型为double protected delegate double TwoLongsOp(double first, double second); //方法不带参数的委托,返回string public delegate string GetString(); public delegate int Comparison<in T>(T left, T right); (注:我们把上述定义的 Comparison<in T> 、

Kotlin实战案例:带你实现RecyclerView分页查询功能(仿照主流电商APP,可切换列表和网格效果)

落花浮王杯 提交于 2019-12-06 10:32:26
随着Kotlin的推广,一些国内公司的安卓项目开发,已经从Java完全切成Kotlin了。虽然Kotlin在各类编程语言中的排名比较靠后(据TIOBE发布了 19 年 8 月份的编程语言排行榜,Kotlin竟然排名45位),但是作为安卓开发者,掌握该语言,却已是大势所趋了。 Kotlin的基础用法,整体还是比较简单的,网上已经有很多文章了,大家熟悉下即可。 案例需求 此次案例,之所以选择分页列表,主要是因为该功能通用性强,涵盖的技术点也较多,对开发者熟悉Kotlin帮助性较大。 案例的主要需求如下( 参考主流电商APP实现 ): 1、列表支持手势滑动分页查询(滑动到底部时,自动查询下一页,直到没有更多数据) 2、可切换列表样式和网格样式 3、切换样式后,数据位置保持不变(如当前在第100条位置,切换样式后,位置不变) 4、footview根据查询状态,显示不同内容: a、数据加载中... (正在查询数据时显示) b、没有更多数据了 (查询成功,但是已没有可返回的数据了) c、出错了,点击重试!!(查询时出现异常,可能是网络,也可能是其他原因) 5、当查询出错时,再次点击footview,可重新发起请求(例如:网络异常了) 6、当切换网格样式时,footview应独占一行 设计 虽然是简单案例,咱们开发时,也应先进行简单的设计,让各模块、各类都各司其职、逻辑解耦

全面理解UE4委托编程

馋奶兔 提交于 2019-12-06 07:15:17
UE4中的 delegate ( 委托 )常用于解耦不同对象之间的关联:委托的拥有者不与监听者有直接关联,监听者通过将响应函数绑定到拥有者的委托上,使得委托触发时能及时收到通知来做相关的逻辑处理 委托本质是一个特殊类的对象,它可以储存(一个或多个)函数指针、调用参数和返回值 UE4在 DelegateCombinations.h 提供了一些宏来方便开发者快速来自定义一个delegate类型,目前引擎(4.23)最多支持4个负载数据和9个参数 大致地使用流程如下: ① 使用DECLARE_*宏声明一个自定义delegate类型FDelegateXXX ② 声明一个FDelegateXXX类型的代理对象 ③ 绑定需要执行的函数指针到代理对象上( 注: 绑定函数与代理对象的参数、返回值必须完全一致) ④ 触发代理对象中的函数指针按顺序立即执行 ⑤ 不需要某个函数指针时,可将其从代理对象中解绑 UE4提供了五类Delegate: 名称 宏 是否支持反射 能否有返回值 触发代理 绑定个数 支持的绑定实例类型 单播代理 DECLARE_DELEGATE_* DECLARE_DELEGATE_RetVal_* 否 可以有 ① 无返回值情况 bool ExecuteIfBound(...) void Execute(...) ② 有返回值情况 RetValue Execute(...) 注

Lambda表达式转换为sql

不羁岁月 提交于 2019-12-06 02:05:54
<div class="cnblogs_Highlighter"><pre class="brush:csharp;gutter:true;">     /// <summary> /// 表达式转sql帮助类 /// </summary> public static class LambdaToSqlHelper { /// <summary> /// 从表达式获取sql /// </summary> /// <typeparam name="T"></typeparam> /// <param name="func"></param> /// <returns></returns> public static string GetSqlFromExpression<T>(Expression<Func<T, bool >> func) { if (func != null && func.Body is BinaryExpression be) { return BinarExpressionProvider(be.Left, be.Right, be.NodeType); } else { return " ( 1 = 1 ) " ; } } /// <summary> /// 拆分、拼接sql /// </summary> /// <param name="left"><

委托和匿名方法和Lambda表达式

半腔热情 提交于 2019-12-05 23:35:58
委托 把一个函数作为参数传递 函数可以直接赋值给一个委托对象、委托的签名必须跟函数的签名一样 是C#中类型安全的,可以订阅一个或者多个具有相同签名方法的函数指针。 使用委托对的步骤 1.声明一个委托类型。类似方法声明,但是没有实现块。 2.使用该委托类型声明一个委托变量。 3.创建委托类型的对象,并把它赋值给委托变量。新的委托对象包括指向某个方法的引用,这个方法和第一步定义的签名和返回类型一致。 4.可以选择为委托方法增加其它方法。方法必须与定义的委托类型有相同的签名和返回类型。 5.在代码中可以像调用方法一样调用委托。在调用委托时,其包含的每一个方法都会被执行。 //声明委托对象 delegate void MyDel(int value); class Program { static void Main(string[] args) { Program program = new Program(); //声明委托变量 MyDel del; //创建随机整数生成器对象,并得到0到99之间的一个随机数 Random rand = new Random(); int randomValue = rand.Next(99); //创建一个包含PrintLow 或者PrintHigh 的委托对象,并赋值给del变量 del = randomValue < 50 ? new MyDel

Lambda表达式动态组装查询条件

萝らか妹 提交于 2019-12-05 17:39:07
最近比较闲,年底了,项目也进入尾声;每天就是维护一下系统,整理整理文档,整理知识点,这样才觉得有点意思; 问题 在使用Linq的where()查询的时候,不知道大家是怎么动态组装多个查询条件时,是怎么做的?我是这样做的,请看下面代码; 方法一: 1.1 Expression的扩展类 public static class PredicateExtensions { public static Expression<Func<T, bool>> True<T>() { return f => true; } public static Expression<Func<T, bool>> False<T>() { return f => false; } public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expression1, Expression<Func<T, bool>> expression2) { var invokedExpression = Expression.Invoke(expression2, expression1.Parameters.Cast<Expression>()); return Expression.Lambda<Func<T, bool>>