ant*_*res 3 c# java collections
有没有合理的解释,为什么在Java集合中搜索元素是如此困难?例如,假设我有:
ArrayList<People> listPeople = new ArrayList<People>();
public class People
{
public String name;
public String age;
//some other code here
}
Run Code Online (Sandbox Code Playgroud)
你明白了......现在,如果我想从列表中获得一个具有给定名称的人,让我们说'Anthares'我必须做很多工作:创建一个名为'Anthares'的新人,可能会启动它其他数据,为Person类预定义我的equals方法,然后调用listPeople.IndexOf(tempPerson),最后得到返回的int并make listPeople [idx]
为什么这一切都是痛苦的.例如,在C#中我可以创建一个linq表达式,将它传递给我收集的正确方法,就是这样.一行简单的代码.
不,你没有 - 你可以这样做:
Person found = null;
for (Person person : listPeople)
{
if ("Anthares".equals(person.name))
{
found = person;
break;
}
}
// Check for found == null etc
Run Code Online (Sandbox Code Playgroud)
是的,它仍然比LINQ更多的工作,但这基本上是因为C#以lambda表达式的形式有闭包.如果你愿意写,你可以在Java中实现类似的东西:
Person person = FakeLinq.findFirst(listPeople, new Predicate<Person>() {
@Override boolean matches(Person person) {
return person.name.equals("Anthares");
}
});
Run Code Online (Sandbox Code Playgroud)
C#解决方案的大多数简洁性只是让您非常简单地表达该谓词.
Java 7的(希望!)有什么合理类似于lambda表达式,此时这在Java中变得可行了.