Java 是否有更干净的方法循环并将对象ID捕获到列表中?
假设我有一组用户:Java 是否有更干净的方法循环并将对象ID捕获到列表中?,java,Java,假设我有一组用户: List<User> users = ...; 有没有更优雅的方法 我知道java不支持linq,所以也许这是唯一的方法,但我想问一下。你做得对。我唯一建议的另一件事是使用Google Guava Collections 2在用户和用户ID上添加空检查和空检查(可选) 优雅 Collections2.transform(lists, new Function<User, UserId>(){ public Us
List<User> users = ...;
有没有更优雅的方法
我知道java不支持linq,所以也许这是唯一的方法,但我想问一下。你做得对。我唯一建议的另一件事是使用Google Guava Collections 2在
用户
和用户ID上添加空检查
和空检查(可选)
优雅
Collections2.transform(lists, new Function<User, UserId>(){
public UserId apply(@Nullable User user) {
return user.getId();
}
});
Collections2.transform(列表,新函数(){
公共用户ID应用(@Nullable User){
返回user.getId();
}
});
我认为这大概是使用Java时最优雅的了遗憾的是,不,不是真的-Java不支持HoF's likemap
:(有一些“功能性”Java库(例如FJ),但它们可以添加比这样一个简单案例所值的更多的样板文件。(userid={user.getID()for(user-user:users)};//这不是很好吗
不,就编码的优雅性和效率而言,这与Java中的一样好。检查番石榴列表。transform()在空检查中没有意义,这只会使循环运行零次。此外,我喜欢将这样的代码片段简化为以下形式的一行代码:for(User:users)userIds.add(User.getId())
如果你知道你列出的用户
不是空的(或者你可以像你说的那样忽略),并且用户ID
不是空的(否则应该处理),我认为这很好。你还在找什么吗?我同意yogendra。如果你不确定,比如100%确定。那么添加空检查。它们是非常可取的。+1因为它显示了“映射”函数;FJ中的方法类似(手动创建匿名函数类/实例)。但是,不,它不是“优雅的”-根本问题是Java语法缺少避免样板文件所需的机制。(Scala是另一种静态类型的JVM语言,它的语法处理样板文件。JDK 8也可能有类似的精确性支持。)但是,需要注意的是,new Function..
只返回一个具有特定命名链/接口的实例。它可以升级为命名类型,例如,class UserToIdMap extensed Function..transform(列表,new UserToIdMap())
。我不会称之为优雅的哈哈哈,但它是def。有一件有趣的事情需要知道。在封面下,每次迭代都会有某种回调?我不会称之为优雅的。但这是Java的错;)
Collections2.transform(lists, new Function<User, UserId>(){
public UserId apply(@Nullable User user) {
return user.getId();
}
});