Эквивалент Ruby #map или #collect в Java?

Допустим, у меня есть массив movies = get_movies()

В рубине я часто movies.map {|movie| movie.poster_image_url } movies.map {|movie| movie.poster_image_url } или somesuch.

Что я могу сделать, что похоже на Java? И таким же элегантным и кратким и читаемым. Я знаю, что существует множество способов, которыми я могу это сделать, но если есть хороший способ сделать это, это заставит меня не хотеть использовать Groovy или что-то, дайте мне знать. Я уверен, что у Java есть некоторые удивительные способы делать такие вещи.

Это мой Java-код до сих пор с использованием Java-оболочки TheMovieDB API от 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()); 

Немного больше о # map / # collect в Ruby, если вы знаете много Java, но не знакомы с ruby. 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 ', когда вы переходите к нелепым длинам, чтобы сделать ваш код «однострочным», команда гуавы плачет)

В потоках есть метод map который принимает аргумент метода.

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

map возвращает другой поток, поэтому для извлечения списка вы вызываете метод collect .

Слишком много, чтобы объяснить в сообщении, но вы можете посетить эту ссылку, которая очень помогла мне:

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

Я думаю (класс коллекций) .foreach () – это то, что вы хотите, требует java8 и часто использует лямбда-выражения для реализации класса, который выполняет требуемый ввод для метода foreach ().

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


Чтобы решить ваше изменение на то, что это Android, тогда НЕТ, вы НЕ получите изменения класса java8, такие как .foreach (), вы можете получить лямбда-выражения, используя вариант ретроблочной андроиды . Но это только дает вам некоторые синтаксисы Java8, а не «классы», вы также не получите доступ к классам Streams.