假设我有一个数组movies = get_movies()
在红宝石中我经常
movies.map {|movie| movie.poster_image_url }这样做。
在 Java 中我能做什么类似的事情?同样优雅、简洁、可读。我知道有无数种方法可以做到这一点,但如果有一种好的方法可以让我不想使用 Groovy 或其他东西,请告诉我。我确信 Java 有一些很棒的方法来做这样的事情。
这是我迄今为止使用来自https://github.com/holgerbrandl/themoviedbapi/的 TheMovieDB API Java 包装器的 Java 代码。
TmdbMovies movies = new TmdbApi(BuildConfig.MOVIEDB_API_KEY).getMovies();
MovieResultsPage results = movies.getPopularMovieList("en", 1);
// The following line is RubyJava and needs to your help!
results.getResults().map {|e| e.getPosterPath() };
// or ... more RubyJava results.getResults().map(&:getPosterPath());
Run Code Online (Sandbox Code Playgroud)
如果您了解很多 Java,但不熟悉 Ruby,请详细了解 Ruby 中的 #map/#collect。http://ruby-doc.org/core-1.9.3/Array.html#method-i-collect
到目前为止,我通过快速浏览看到的最接近回答这个问题的东西...... https://planet.jboss.org/post/java_developers_should_learn_ruby
这些看起来也很接近。http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
多种选择:Java 函数式编程
这也是 Android 的……有什么好东西可以供 Android 开发人员开箱即用,并使这种编程变得容易吗?这是函数式编程风格,对吧?
--
在得到诸如“for 循环没有任何问题”和(基本上)“语法并非一切”等非常好的见解的回复后,我决定我不会尝试让我的所有 Java 看起来像 Ruby!我读了这篇文章,然后想象了另一个未来,“未来的我”做出了一大堆糟糕的风格决定:https://github.com/google/guava/wiki/FunctionalExplained。<--(一本好书。TL;DR“当你不遗余力地让你的代码成为“一句台词”时,Guava 团队会哭泣”)
流上有一个map方法,它接受一个方法参数。
collection.stream()
.map(obj -> obj.someMethod())
.collect(Collectors.toList()));
Run Code Online (Sandbox Code Playgroud)
map返回另一个流,因此为了检索您已调用该collect方法的列表。
在帖子中解释的内容太多,但您可以访问此链接,它对我帮助很大:
http://winterbe.com/posts/2014/03/16/java-8-tutorial/