lambda表达式

JAVA8 之初识函数式编程与函数式接口(一)

巧了我就是萌 提交于 2020-01-15 05:06:58
目前大部分的 JAVA8 的教程一上来就给大家将 Lambda 表达式,方法引用,给大家搞得云里雾里,最终导致 JAVA8 学习的不是特别透彻。我们先来了解一下什么时候能用 Lambda 表达式,然后在探究怎么用 Lambda 表达式。 从函数式编程开始 时光小说网 https://wap.youxs.org/ 前一章节我们说过,JAVA8 其实是 Java 像其他语言或者一些优秀的框架学习的结果。函数式编程这个概念提出的非常早,有很多语言都是支持函数式编程的。JAVA8 中也对函数式编程做了支持。我们下面要介绍的函数式接口等概念都是围绕函数式编程而生的。 什么是函数式编程? 简单说, 函数式编程 是一种 编程范式 (programming paradigm),也就是如何编写程序的方法论。这句话是百度百科中给我们的解答,如果单看这句话,我们可能根本理解不了到底什么是 函数式编程 。 我们不妨使用我们最熟悉的面向对象编程( 命令式编程 )来类比一下,让大家能对函数式编程有一个简单的概念。 命令式编程是针对于计算机硬件的,我们写的每一句话都是一个底层的硬件指令。函数式编程不是我们中的 函数 不是我们平时在 Java 中编写的函数或者方法,它是一种针对于数学的概念,可以将其理解为一个表达式或者公式,或者理解为数据之间的转换关系。 我们说 JAVA8 以前不支持函数式编程

lambda表达式修改外部变量

China☆狼群 提交于 2020-01-14 19:45:55
lambda 表达式接受外部变量是通过copy副本的方式,所以编译器要求不能修改该变量值或则引用值,如果要修改可以通过集合或则实体类包装的方式实现。 如: https://zhuanlan.zhihu.com/p/29245059 public static void main(String[] args) { System.out.println("sss"); List<String> list = Arrays.asList("0.1", "1.22", "22", "321"); List<BigDecimal> bigDecimal = new ArrayList<>(); list.forEach(u->{ if (CollectionUtils.isEmpty(bigDecimal)) { bigDecimal.add(new BigDecimal(u)); } else { bigDecimal.set(0, bigDecimal.get(0).add(new BigDecimal(u))); } }); System.out.println(bigDecimal.toString()); } 来源: CSDN 作者: 拉丁卡特 链接: https://blog.csdn.net/u013217730/article/details/103973877

lambda表达式学习整理

…衆ロ難τιáo~ 提交于 2020-01-13 02:23:46
前言 以下是自己学习lambda整理的笔记还在完善,如有更好的写法欢迎各位大佬在下方提出 代码注释我写的很清楚多看注释 1.List存储对象取id 和name转成Map 集合 //创建集合存储user对象 List < UserInfo > userInfoList = new ArrayList < > ( ) ; UserInfo user = new UserInfo ( ) ; user . setUserId ( 1 L ) ; user . setRealName ( "张三" ) ; userInfoList . add ( user ) ; Map < Long , String > map = //创建一个并行流 userInfoList . parallelStream ( ) //添加过滤条件 . filter ( u - > u != null ) //返回一个Map集合key是userId value是用户姓名 . collect ( toMap ( UserInfo : : getUserId , UserInfo : : getRealName ) ) ; //遍历打印 map . forEach ( ( k , v ) - > { System . out . println ( "key:" + k + " " + "value: " + v )

Lambda表达式转换为sql

≡放荡痞女 提交于 2020-01-11 03:43:24
/// <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"></param> /// <param name="right"></param> /// <param name="type"></param> ///

lambda表达式转换sql

帅比萌擦擦* 提交于 2020-01-10 08:40:23
这是我在博客园的第一遍文章,想分享下lambda表达式转换sql。 喜欢EF的便捷与优雅,不喜欢生成的一坨sql。(PS:公司封装了一套访问数据库的方法,所以不确定是不是EF的问题,反正就是一坨密密麻麻的的sql,我有点点处女座小纠结,虽然我是天蝎座) 好了,废话少说。 1 public class LambdaToSqlHelper 2 { 3 /// <summary> 4 /// NodeType枚举 5 /// </summary> 6 private enum EnumNodeType 7 { 8 /// <summary> 9 /// 二元运算符 10 /// </summary> 11 [Description("二元运算符")] 12 BinaryOperator = 1, 13 14 /// <summary> 15 /// 一元运算符 16 /// </summary> 17 [Description("一元运算符")] 18 UndryOperator = 2, 19 20 /// <summary> 21 /// 常量表达式 22 /// </summary> 23 [Description("常量表达式")] 24 Constant = 3, 25 26 /// <summary> 27 /// 成员(变量) 28 /// </summary> 29

  java8之lambda表达式(构造器引用)

此生再无相见时 提交于 2020-01-08 20:51:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 构造器引用同方法引用类似,不同的是在构造器引用中方法名是new。例如,Button::new表示Button类的构造器引用。对于拥有多个构造器的类,选择使用哪个构造器取决于上下文。假设你有一个字符串列表,并且希望调用Button类的构造器使用列表中的字符串来构造一个按钮列表,可以使用如下表达式: List<String> labels = ....; Stream<Button> stream = labels.stream().map(Button::new); List<Button> buttons = stream.collect(Collectors.toList()); 后面我们会详细讨论stream,map和collect方法。但是现在,重要的是对于每个列表元素,map方法会调用Button(String)构造器。虽然Button类有多个构造器,但是编译器会从上下文中推断并挑选只带一个String参数的构造器。 你可以使用数组类型来编写构造器引用。例如,int[]::new是一个含有一个参数的构造器引用,这个参数就是数组的长度。它等同于lambda表达式 x -> new int[x]。数组构造器引用可以用来绕过java中的一个限制。在Java中,无法构造一个泛型类型T的数组。表达式 new T

Lambda表达式怎么写SQL中的in?

僤鯓⒐⒋嵵緔 提交于 2020-01-06 08:20:10
ambda表达式查询没有IN这个方法,可以变通一下,in查询的数组是否包含在映射对象里面的集合里 直接贴代码吧,一看就懂了 class Program { static void Main(string[] args) { List<Model> strList = new List<Model>() { new Model(){Id=1,Name = "张三"}, new Model(){Id=2,Name = "李四"}, new Model(){Id=3,Name = "王五"}, new Model(){Id=4,Name = "赵六"}, }; List<int> whereList = new List<int>(){1,3}; var list = strList.Where(x => whereList.Contains(x.Id)); foreach (var model in list) { Console.WriteLine("Id:"+model.Id+"Name:"+model.Name); } Console.ReadKey(); } } public class Model { public int Id { get; set; } public string Name { get; set; } } 运行结果: 来源: https://www

Java8 Lambda表达式教程

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-03 16:45:05
转自:http://blog.csdn.net/ioriogami/article/details/12782141 1. 什么是λ表达式 λ表达式本质上是一个匿名方法。让我们来看下面这个例子: public int add(int x, int y) { return x + y; } 转成λ表达式后是这个样子: (int x, int y) -> x + y; 参数类型也可以省略,Java编译器会根据上下文推断出来: (x, y) -> x + y; //返回两数之和 或者 (x, y) -> { return x + y; } //显式指明返回值 可见λ表达式有三部分组成:参数列表,箭头(->),以及一个表达式或语句块。 下面这个例子里的λ表达式没有参数,也没有返回值(相当于一个方法接受0个参数,返回void,其实就是Runnable里run方法的一个实现): () -> { System.out.println("Hello Lambda!"); } 如果只有一个参数且可以被Java推断出类型,那么参数列表的括号也可以省略: c -> { return c.size(); } 2. λ表达式的类型(它是Object吗?) λ表达式可以被当做是一个Object(注意措辞)。λ表达式的类型,叫做“目标类型(target type)”。λ表达式的目标类型是“函数接口

委托、匿名方法、Lambda表达式、泛型委托(自定义、Func、Action、Predicate)、约束泛型类和方法、多窗体传递消息、事件、异步编程、二次控件开发

放肆的年华 提交于 2020-01-02 07:13:31
1.匿名方法   没有具体名称,只有委托关键字、方法参数、方法体,所以称之为匿名方法   匿名方法允许将代码块(方法体部分)通过委托变量作为参数传递,以代替独立定义的方法 总结:   方法体要以delegate开头,其后是参数列表,后面紧跟花括号编写方法体,最后以分号结尾   匿名方法是将方法定义与委托变量两个步骤合在一起,省略了方法的单独定义   如果一个方法有一个委托类型的参数,可以直接将匿名方法作为实参。 1 //声明委托 2 public delegate int MyDelegate(int a, int b); 3 4 static void Main(string[] args) 5 {//匿名方法 6 MyDelegate objDel = delegate (int a, int b) 7 { 8 return a + b; 9 }; 10 Console.WriteLine(objDel(10, 20)); 11 Console.ReadLine(); 12 } 匿名方法 2.lambda表达式   C#3.0引入lambda表达式,lambda表达式是匿名方法更简介使用的一种方式   (参数列表) => {方法体} =>读作goes to   lambda表达式参数列表中的参数类型可以是“明确”类型或者是“推断类型”(可以省略参数类型)   如果是推断类型

使用java8 lambda表达式对集合去重、分组、排序、累加指定字段的值

試著忘記壹切 提交于 2020-01-01 04:41:03
import com.alibaba.fastjson.JSON; import org.springframework.beans.BeanUtils; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @author * @date 2019-12-30 17:47 * @description */ public class TestMain { public static void main(String[] args) { List<User> list = new ArrayList<>(); User user1 = new User(); user1.setUserId("11111"); user1.setUserName("张三"); user1.setAmount(BigDecimal.valueOf(1500)); User user2 = new User(); user2.setUserId("11111"); user2.setUserName("张三"); user2.setAmount(BigDecimal