2013-07-03 6 views
7

Ho bisogno di passare parte dei miei progetti da C# a Java. Ma prima di ciò, vorrei confrontare due lingue attentamente e completamente.Espressione lambda in Java?

Per quanto riguarda l'espressione lambda, potrei scrivere codice molto elegante tramite C#, la domanda è come implementare la stessa funzione con garbo in Java? Grazie in anticipo!

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 ha bisogno di tempo per recuperare il ritardo –

+3

Oddio :(Non solo Java (7) non ha lambda, ma la libreria di raccolta di default (in Java 7) non ha alcun tipo di supporto HoF - niente di paragonabile a LINQ. Ci sono alcune librerie non standard che possono "aiutare" con quelle espressioni di 'Where' (in un modo Java), ma ci vorrà un po 'di "riscrittura della merda a mano" in caso contrario. Penso che la migliore la domanda è ** "Com'è possibile [o meno doloroso] portare questo [semplice] LINQ/Codice Enumerabile a Java?" ** (per evitare le risposte banali, come ricevuto). – user2246674

+0

Ho capito, il modo tradizionale sarà usato per scrivere il codice come sopra in Java. Ad ogni modo, non vedo l'ora che arrivi Java8. –

risposta

3

Java in versione 8 potrebbe supportare lambda .)

È possibile utilizzare questo Site o this. Vedere questo esempio:

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 .. potrebbe .. sì, divertirsi con questo: D (Java è morto per me, non vorrei prendere in considerazione l'utilizzo di nuovo .. beh, non senza un significativo aumento di stipendio.) – user2246674

+0

Java 8 ... potrebbe : D –

+1

Grazie a tutti. Poiché Java non supporta lambda attualmente, eviterò di utilizzare questa funzione e di creare una soluzione alternativa quando necessario. –

0

lambda espressioni non sono parte della versione corrente di Java (1.7) è una caratteristica per Java 8, che non sarà rilasciato, almeno fino al prossimo anno

3

Attualmente Java non supporta il funzionamento Lambda, ma questo sta per essere introdotto in Java 8. Per ulteriori riferimenti site

Ma come si desidera passare a Java questo è una buona opzione, ma finché operazione lambda non è supportata è possibile creare i vostri metodi di fare lo stesso compito e dopo Java 8 spostamento di rilascio per l'operazione Lambha

here is an example of lambha operation in java 8

1

Java 8 supporta l'espressione Lambda. Ecco come è possibile utilizzare un'espressione lambda in Java per ordinare un elenco di studenti

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

Collections.sort(students,rollNumberComparator); 

}

È possibile fare riferimento: http://www.groupkt.com/post/088a8dea/lambda-expressions---java-8-feature.htm