2013-07-03 80 views
7

我需要将我的部分项目从C#切换到Java。但在此之前,我想仔细而完整地比较两种语言。Java中的Lambda表达式?

关于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需要时间来赶上 –

+3

哦,亲爱:(不仅Java(7)没有lambda的,但默认的集合库(在Java 7中)没有任何类型的HoF支持 - 甚至没有什么可以与LINQ相提并论。有一些非标准的库可以“帮助”这些“Where”表达式(以Java'esque的方式),但它需要一些“用手重写垃圾”,否则我认为更好问题是**“如何将这个[简单] LINQ/Enumerable代码移植到Java?”(以避免收到的微不足道的答案)。 – user2246674

+0

我明白了,传统方式将用于在Java中编写如上所示的代码。无论如何,我期待着Java8的到来。 –

回答

3

的Java可能支持拉姆达功能。;)

您可以使用此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} 
+2

Java 8 ..可能..是的,玩得开心:D(Java对我来说已经死了,我不会考虑再次使用它..好吧,不是没有显着的薪水增长) – user2246674

+0

Java 8 ...可能:D –

+1

谢谢大家。由于Java目前不支持lambda,因此我将避免使用此功能并在需要时创建解决方法。 –

0

Lambda表达式不是Java的当前版本的部分(1.7),它是Java 8,它不会,至少在8个版本被释放,直到明年

3

目前Java不支持LAMBDA操作,但这将要在Java中8 被引入以进一步参考site

但是当你要切换到Java这个是一个不错的选择,但只要不支持拉姆达操作,您可以创建你的方法做同样的任务,之后的Java 8版本转移到拉姆巴操作

here is an example of lambha operation in java 8

1

Java 8支持Lambda表达式。这里是你如何使用lambda表达式在Java中排序的学生的

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