Java中的Lambda表达式?

6

我需要将我的一些项目从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());
    }
}

4
Java需要时间赶上。 - Dan Teesdale
3
哦,亲爱的:( Java 7不仅没有Lambda表达式,而且默认集合库(在Java 7中)缺乏任何类似于LINQ的HoF(高阶函数)支持。有一些非标准库可以“帮助”处理那些“Where”表达式(以Java方式),但否则它将需要一些手工“重写糟糕的代码”。我认为更好的问题是:“如何将此[简单]LINQ / Enumerable代码移植到Java中?”(避免像接收的那样琐碎的答案)。 - user2246674
我明白了,将以传统方式在Java中编写代码。不管怎样,我期待着 Java8 的到来。 - Miles Chen
可能是.NET的Lambda表达式在Java中的等效实现的重复问题。 - nawfal
阅读这篇文章:https://smugjava.blogspot.in/2017/11/lamda-expression-in-java-8.html,它用行为参数化的概念作为例子,精彩地解释了lambda表达式。 - Jameer Mulani
5个回答

3

Java 8版本可能支持lambda表达式。

你可以使用这个网站或者这个。 看下面的例子:

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}  

2
Java 8..可能..是的,玩得开心:D(对我来说,Java已经死了;我不会再考虑使用它..除非有显著的加薪。) - user2246674
1
谢谢大家。由于Java目前不支持lambda,我将避免使用此功能,并在需要时创建解决方法。 - Miles Chen
1
@pleasedeleteme Java 8 ... 就是这样! :-) - Stuart Marks

3

目前Java不支持Lambda操作,但这将在Java 8中引入。 更多参考 site

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

这里是Java 8中lambha操作的示例


1

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

0

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


-1

函数式接口的Lambda表达式

enter image description here

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接