相当于 Java 中的 Ruby #map 或 #collect?

Dav*_*est 4 java android

假设我有一个数组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 团队会哭泣”)

Quy*_*Quy 5

流上有一个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/

  • 您可以使用“YourObject::someMethod”等函数引用将其与“%:link”进行比较。@David:整个流的事情比 Ruby 或 Groovy 所做的要好得多(由于惰性评估),关注语法并不是最重要的事情。 (2认同)
  • Util.Stream 是从 java 1.8 (Java8) 开始的,你不会在 Android 上得到它(最早要到下一个 google IO,_IF_ 然后他们会在 Android 上添加对 java8 的支持) https://docs.oracle.com/ javase/8/docs/api/java/util/stream/Stream.html (2认同)