【问题标题】:Lambda expression in Java?Java中的Lambda表达式?
【发布时间】:2013-06-30 15:07:28
【问题描述】:

我需要将部分项目从 C# 切换到 Java。但在此之前,我想仔细、完整地比较两种语言。

关于 lambda 表达式,我可以通过 C# 编写非常优雅的代码,问题是如何在 Java 中优雅地实现相同的功能?提前致谢!

class Program
{
    enum Gender
    {
        Male,
        Female
    }
    class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public Gender Gender { get; set; }
        public override string ToString()
        {
            return string.Format("Id: {0}, Name: {1}, Age: {2}, Gender: {3}", Id, Name, Age, Gender);
        }
    }

    static void Main(string[] args)
    {
        var students = new[] { 
            new Student { Id = 1, Name = "Nathanial Archibald", Age = 18, Gender = Gender.Male },
            new Student { Id = 2, Name = "Georgina Sparks", Age = 19, Gender = Gender.Female },
            new Student { Id = 3, Name = "Daniel Humphrey", Age = 20, Gender = Gender.Male },
            new Student { Id = 4, Name = "Jenny Humphrey", Age = 17, Gender = Gender.Female },
        };

        var men = students.Where(p => p.Gender == Gender.Male);
        var ageAbove18 = students.Where(p => p.Age > 18);
        var humphrey = students.Where(p => p.Name.EndsWith("Humphrey"));
        var idGT1orderbyAge = students.Where(p => p.Id > 1).OrderBy(p => p.Age);

        foreach (var s in men) Console.WriteLine(s.ToString());
        foreach (var s in ageAbove18) Console.WriteLine(s.ToString());
        foreach (var s in humphrey) Console.WriteLine(s.ToString());
        foreach (var s in idGT1orderbyAge) Console.WriteLine(s.ToString());
    }
}

【问题讨论】:

  • java需要时间赶上
  • 天哪 :( 不仅 Java (7) 没有 lambda,而且默认的集合库(在 Java 7 中)缺乏任何类型的 HoF 支持 - 甚至无法与 LINQ 相比。有一些非-标准库可以“帮助”那些Where 表达式(以Java 的方式),但否则需要一些“手动重写废话”。我认为更好的问题是“How is将这个 [简单] LINQ/Enumerable 代码移植到 Java 有可能 [或最不痛苦]?”(以避免收到琐碎的答案)。
  • 我明白了,传统方式将用于在Java中编写上述代码。不管怎样,我很期待Java8到来的那一天。
  • 阅读这篇文章:smugjava.blogspot.in/2017/11/lamda-expression-in-java-8.html 它通过行为参数化概念的示例为您精彩地解释了 lambda 表达式。

标签: c# java lambda closures


【解决方案1】:

Lambda 表达式不是当前 Java (1.7) 版本的一部分,它是 Java 8 的一个特性,至少要到明年才会发布

【讨论】:

    【解决方案2】:

    版本 8 中的 Java 可能支持 lambda。;)

    您可以使用此Sitethis。 看这个例子:

    final Array<Integer> a = array(1, 2, 3);  
    final Array<Integer> b = a.map({int i => i + 42});  
    arrayShow(intShow).println(b); // {43,44,45}  
    

    【讨论】:

    • Java 8 .. 可能 .. 是的,玩得开心 :D (Java 对我来说已经死了;我不会考虑再次使用它 .. 好吧,不是没有显着的加薪。)
    • 谢谢大家。由于 Java 目前不支持 lambda,因此我将避免使用此功能并在需要时创建解决方法。
    • @pleasedeleteme Java 8 ...可以! :-)
    【解决方案3】:

    目前 java 不支持 Lambda 操作,但这将在 Java 8 中引入。 进一步参考site

    但是当您想切换到 Java 时,这是一个不错的选择,但只要不支持 lambda 操作,您就可以创建您的方法来执行相同的任务,并在 java 8 发布后转移到 lambha 操作

    here is an example of lambha operation in java 8

    【讨论】:

      【解决方案4】:

      Java 8 支持 Lambda 表达式。以下是如何在 java 中使用 lambda 表达式对学生列表进行排序

      private static void sort(List<Student> students) {
      Comparator<Student> rollNumberComparator = (student1, student2) -> 
          student1.getRollNumber().compareTo(student2.getRollNumber());
      
      Collections.sort(students,rollNumberComparator);
      

      }

      您可以参考: http://www.groupkt.com/post/088a8dea/lambda-expressions---java-8-feature.htm

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-16
        • 1970-01-01
        • 1970-01-01
        • 2015-06-01
        • 2015-05-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多