функциональный Java - преобразование путем вызова функции-члена - PullRequest
1 голос
/ 16 февраля 2012

Я подхожу к некоторой функциональной Java с точки зрения ruby ​​

в ruby, вы можете сделать что-то вроде этого

mapped_array = [1,2,3].map(&:to_s)

, что приводит к преобразованию (сопоставлению) массивавызывая функцию-член to_s для каждого объекта

mapped_array = []
[1,2,3].each { |e| mapped_array << e.to_s }

, я хотел бы сделать нечто подобное в Java, а именно преобразовать список Product-3 (fj.P3), вызвав метод _2 () длякаждый объект

List<P2<Integer, Double>> aListOfP2;
final List<Double> costs = transform(aListOfP2, Converters.<Integer, Double>second());

, поэтому мне пришлось где-то определить метод

public static final <A,B> Function<P2<A,B>,B> second() {
    return new Function<P2<A, B>, B>() {
        public B apply(final P2<A, B> from) {
            return from._2();
        }
    };
};

, но затем, если я хочу получить первый элемент, это другой метод ... если я хочуполучить второй элемент из P3, это другой метод.

Вопрос в том ... Если в ruby ​​не существует механизма, подобного таковому, какой самый общий способ сделать это?

1 Ответ

1 голос
/ 20 февраля 2012

Вы должны проверить __ 2 () , как, например, два подчеркивания.

чтобы ваша строка стала:

List<P2<Integer, Double>> aListOfP2;
final List<Double> costs = transform(aListOfP2, P2.<Integer, Double>__2());

или вы можете использовать что-то вроде

final List<Double> costs = aListOfP2.map(P2.__2()).map(transform);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...