lambda expressions

lambda:

Java lambda表达式是Java 8中的新增功能.Java lambda表达式是Java进入函数式编程的第一步。因此,Java lambda表达式是一个可以在不属于任何类的情况下创建的函数。Java lambda表达式可以作为对象传递,并按需执行。

Java lambda表达式通常用于实现简单的事件侦听器/回调,或者使用Java Streams API进行函数式编程。

lambda expressions的使用:

很多时候我们在使用Lambda表达式查询时,比如使用Lambda表达式查询用户数据,有时候会用电话或邮箱去查询用户信息,有时候又会用户名去查询用户信息

    var user = db.Set<U_User>().Where(c => c.UserName = "nee32");
    var user = db.Set<U_User>().Where(c => c.TelePhone = "13888888888");

其实查询的结果都一样,但唯一的区别就是Lambda表达式中的条件不一样,那么能不能只写一个查询方法,而实现Lambda表达式中Where的有查询条件呢?答案当然是 能!例如在三层架构中使用一个方法满足使用多个条件查询,代码如下

    public class UserDAL
    {
        /// <summary>
        /// 根据条件查找用户列表
        /// </summary>
        /// <param name="where"></param>
        /// <returns></returns>
        public List<U_User> FindAll(System.Linq.Expressions.Func<U_User, bool>> where = null)
        {
            using (EFContext db = new EFContext())
            {
                if (where == null)
                    return db.U_User.ToList();
                else
                    return db.U_User.Where(where).ToList();
            }
        }
    }

声明了一个FindAll方法,参数是可空的Lambda表达式(Expression<Func<U_User, bool>>表示一个Lambda表达式)

其中Func<U_User, bool>使用泛型委托 传入U_User,返回一个bool值

方法调用

        public ActionResult Index()
        {
            //List<U_User> userList = userBLL.FindAll(c => c.UserName == "nee32");
            //List<U_User> userList = userBLL.FindAll(c => c.UserName == "nee32" && c.Status == 1);
            List<U_User> userList = userBLL.FindAll();
            return View();
        }

使用Expression表达式分页,注意 Linq分页之前必须先排序 分页代码如下

    /// <typeparam name="TKey">排序的字段类型</typeparam>
    /// <param name="pageIndex">当前页</param>
    /// <param name="pageSize">每页条数</param>
    /// <param name="orderby">排序字段 Lambda表达式</param>
    /// <param name="where">查询条件 Lambda表达式</param>
    /// <returns></returns>
    public List<U_User> GetPageList<TKey>(int pageIndex, int pageSize, Expression<Func<U_User, TKey>> orderby,Expression<Func<U_User, bool>> where = null)
    {
        using (EFContext db = new EFContext())
        {
            var query = from d in db.U_User select d;
            if (where != null)
            {
                query = query.Where(where);
            }
            var data = query.OrderBy(orderby)
            .Skip((pageIndex - 1) * pageSize)
            .Take(pageSize)
            .ToList();

            return data;
        }
    }

分页方法调用

    public ActionResult Index()
    {
        List<U_User> userList = userBLL.GetPageList(1, 20, c => c.CreateTime, c => c.UserName == "nee32");
        return View(userList);
    }

参考官网http://tutorials.jenkov.com/java/lambda-expressions.html

原文地址:https://www.cnblogs.com/xiaohuomiao/p/11040555.html

时间: 2024-10-12 07:32:16

lambda expressions的相关文章

Java 8 Lambda Expressions by Examples

Ever since I heard Java 8 is going to support lambda expressions (aka closures), I was very enthusiastic to spice my code with such a decent and concise functional element. Most developers extensively use Anonymous Inner Classes for event handlers, c

java 8之Lambda Expressions 解说

java 8之Lambda Expressions 解说 java 8 新增Lambda Expressions 的目的:为了使代码简洁易读和消除过多的冗余代码(尽量让编译器做代码转换工作,也可以认为是语法糖之类的作用). 使用过c.c++语言的人,都记得,他们的函数参数可以是函数指针即代码片段(某些行为),而在java语言中,要想使得函数为参数,必须把函数封装成对象,以对象传参才可以.而 java 8 新增Lambda Expressions 使得这一现状得到缓解(函数式变成.闭包之类的概念都

jdk8新特性之lambda expressions

本文分两部分: 语法简单说明 lambda的使用 注:这两部分内容均以类+注释的方式进行说明,并且内容均来自官方教程(https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html). 第一部分: /** * 语法说明类 * * lambda表达式包含下面几个要素: * 1.逗号分隔的参数列表,如CheckPerson.test(Person p),其中p表示一个Person的对象实例 * 2.向右箭头 →,

When to Use Nested Classes, Local Classes, Anonymous Classes, and Lambda Expressions

As mentioned in the section  Nested Classes, nested classes enable you to logically group classes that are only used in one place, increase the use of encapsulation, and create more readable and maintainable code. Local classes, anonymous classes, an

Lambda Expressions 笔记

随Java 8发布,"The Java(TM) Tutorials"增加了关于“Lambda Expressions”的教程.本文是此教程的总结.摘要. 一.Lambda的实质是一个匿名类 二.Lambda公式只能实现 functional 接口: 1. 只有一个虚方法的借口,叫做 functional 接口: 2. functional 接口中可以有一个或多个默认方法和静态方法. 三.Lambda公式的格式 例如: p -> p.getGender() == Person.Se

Hacking Lambda Expressions in Java

Hacking Lambda Expressions in Javahttps://dzone.com/articles/hacking-lambda-expressions-in-java At the bytecode level, a lambda expression is replaced with an invokedynamic instruction. This instruction is used to create implementations of a function

Lambda Expressions表达式使用

很多时候我们在使用Lambda表达式查询时,比如使用Lambda表达式查询用户数据,有时候会用电话或邮箱去查询用户信息,有时候又会用户名去查询用户信息 var user = db.Set<U_User>().Where(c => c.UserName = "nee32"); var user = db.Set<U_User>().Where(c => c.TelePhone = "13888888888"); 其实查询的结果都一样

Lambda expressions , Action , Func and Predicate

http://www.tutorialsteacher.com/csharp/csharp-action-delegate lambda 表达式 Action,func lambda表达式是什么,其有什么优点,不使用lambda 其的目的:简化代码. 在JAVA当中一般是使用接口来实现 Action is also a delegate type defined in the System namespace. An Action type delegate is the same as Fun

JAVA 8 Lambda表达式-Lambda Expressions

Lambda表达式介绍 Lambda表达式是在java规范提案JSR 335中定义的,Java 8 中引入了Lambda表达式,并被认为是Java 8最大的新特性,Lambda表达式促进了函数式编程,简化了Java编程开发. 背景知识 匿名内部类 在Java中,匿名内部类一般适用于那些在Java应用中只会出现一次的实现类,举个例子,在标准的Swing或JavaFX应用中,有很多键盘和鼠标的事件处理程序,一般情况下,你不需要写一个单独的事件处理类,而是使用如下方式(有Swing编程经验的应该很熟悉