【发布时间】: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 表达式。