Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有更干净的方法循环并将对象ID捕获到列表中?_Java - Fatal编程技术网

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 like
map
:(有一些“功能性”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();
            }

        });