【发布时间】:2015-12-20 11:26:01
【问题描述】:
假设我有一个数组movies = get_movies()
我经常在 ruby 中使用
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());
如果您了解很多 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
这么多选择:Functional Programming in Java
这也是 Android ......有什么好东西可供 Android 开发人员开箱即用并让这种编程变得简单?这是一种函数式编程风格,对吧?
--
在得到诸如“for 循环没有任何问题”和(基本上)“语法不是一切”这样非常好的见解的回复后,我决定不再尝试让我的所有 Java 看起来都像 Ruby !我读了这篇文章,然后想象了另一个未来,“未来的我”做出了一大堆糟糕的风格决定:https://github.com/google/guava/wiki/FunctionalExplained。
【问题讨论】:
-
您正在通过
results.getResults().stream().map(MovieResult::getPosterPath).collect(Collectors.toList());之类的方式查找 Java 8 的 java.util.stream。如果您正在执行一长串操作来摊销 .stream()/.collect(),或者如果您与.parallel()并行运行,则效果最佳。但实际上,for 循环并没有错……