当前位置: 首页 > 知识库问答 >
问题:

相当于Ruby#map还是Java中的#collect?

微生恩
2023-03-14

假设我有一个数组< code>movies = get_movies()

在ruby中,我经常做movies.map{|电影|movie.poster_image_url}或一些事情。

在Java中,我能做些什么类似的事情?同样优雅,简洁和可读。我知道我有很多方法可以做到这一点,但如果有一个很好的方法来做到这一点,这将使我不想使用Groovy或其他东西让我知道。我相信Java有一些很棒的方法来做这样的事情。

这是我迄今为止使用TheMovieDB API Java包装器的Java代码,来自 https://github.com/holgerbrandl/themoviedbapi/。

        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()); 

关于Ruby中的#map/#collect的更多信息,以防您了解很多Java,但不熟悉Ruby。http://ruby-doc.org/core-1.9.3/Array.html#method-我收集

到目前为止,我看到的最接近回答这个问题的快速浏览...https://planet.jboss.org/post/java_developers_should_learn_ruby

这些看起来也很接近。http://docs . Oracle . com/javase/tutorial/Java/javaOO/lambda expressions . html

如此多的选择:Java中的函数式编程

这也是Android...对于Android开发人员来说,有什么好东西可以开箱即用,并使这种编程变得容易吗?这是一种函数式编程风格,对吧?

--

在收到回复后,我有了非常好的见解,比如:“for循环没有错”和(基本上)“语法不是一切”,我决定我不会试图让我所有的Java看起来像Ruby!我读了这篇文章,然后想象了一个交替的未来,在这个未来,“未来的我”做出了一大堆糟糕的风格决定:https://github.com/google/guava/wiki/FunctionalExplained.

共有2个答案

邢星波
2023-03-14

我认为(一个集合类). foreach()是你想要的,需要java8,并且经常使用lambda表达式来实现满足'foreach()'方法所需输入的类。

http://www.mkyong.com/java8/java-8-foreach-examples/

要解决您对这是Android的更改,则不,您将不会得到java8类更改,例如.foreach(),您可以通过使用retrolambda Android变体来获得lambda表达式。但这只提供了一些Java8的“语法”而不是“类”,您也无法访问Streams类。

谭曦
2023-03-14

streams上有一个< code>map方法,它接受一个方法参数。

collection.stream()
  .map(obj -> obj.someMethod())
  .collect(Collectors.toList()));

map返回另一个流,因此为了检索列表,您必须调用收集方法。

在帖子中解释太多了,但你可以访问这个链接,它帮助了我很多:

http://winterbe.com/posts/2014/03/16/java-8-tutorial/

 类似资料:
  • 问题内容: 我正在寻找具有C ++ std :: map的通常实现特征的Java类(据我了解,这是一个自平衡二进制搜索树): 插入/删除/搜索的O(log n)性能 每个元素均由唯一键和映射值组成 按键遵循严格的弱顺序 我正在寻找带有开源或设计文档的实现;我可能最终会放弃对原始键/值的支持。 这个问题的风格类似于:std :: deque的Java等效 ,其答案是“ Java Primitive

  • 问题内容: 是否有类似于Python实用程序virtualenv的东西? 基本上,它允许您将Python软件包安装到沙盒环境中,因此它不会进入系统范围的site- packages目录,而是会进入virtualenv创建的目录。 例如: RubyGems是否有类似的东西? 问题答案: RVM的工作方式与virtualenv的工作方式更为接近,因为它可以让您沙盒化不同的红宝石版本及其宝石等。

  • 问题内容: 我的任务是为开源应用程序编写身份验证组件。我们有一个使用的内部身份验证小部件。我有一些例子访问的代码,它使用来办理过户。 我的问题是,是否有to 的端口,或者更好的是,什么基本软件包将使我足够接近以处理任务? 更新 : 简而言之,我想在JAVA中复制的代码: 我认为您的目标是正确的,我认为我最终将使用HttpsURLConnection,然后从响应中选择所需的内容。 问题答案: 省略异

  • 问题内容: 什么是Java相当于ManualResetEvent? 问题答案: 我所知道的最接近的是信号量。只需将其“许可”计数为1即可使用,获得/释放将与您从中获得的信息几乎相同。 初始化为一个的信号灯可以用作互斥锁,该信号灯最多只能使用一个许可。这通常被称为二进制信号量,因为它只有两种状态:一个许可可用,或零许可可用。当以这种方式使用时,二进制信号量具有属性(与许多Lock实现不同),该“锁”

  • 问题内容: 我在Visual Basic中有一个加密的字符串。NET 2008,加密和解密的功能如下: 例如,使用此功能加密的单词“ android”会给我结果“ B3xogi / Qfsc =“ 现在我需要使用相同的密钥“ key12345”从java解密字符串“ B3xogi / Qfsc =“,其结果应为“ android” …任何人都知道该怎么做? 提前致谢。 问题答案: 使用Apache

  • 问题内容: 我正在使用Java进行编译器设计项目。进行了词法分析(使用jflex),我想知道哪种yacc类工具最适合(最有效,最易用等)进行语法分析,为什么这样做。 问题答案: 如果您特别想要类似YACC的行为(表驱动),那么我所知道的唯一一个就是CUP。 在Java世界中,似乎有更多的人倾向于ANTLR或JavaCC之类的递归下降解析器。 而且效率很少是选择解析器生成器的原因。