кода я хочу написать, в основном выглядит следующим образом Persistable
является интерфейсом в Spring Data с getId
и isNew
предоставления инструкций для серии карт вызовов, общие вопросы
Optional<Pair<Persistable<Long>, <Persistable<Long>>> pair = Optional.of(Pair.of(prev, next));
return Long.instructions()
.map(instruction -> {
return pair.map(extractPair(instruction.extractProperty()))
.map(instruction.pairToBuilder())
.filter(Optional::isPresent)
});
Иногда я хочу, чтобы преобразовать «Длинные» для строки, другие - для Integer. это более гипотетично для уменьшения от сложных объектов.
Я хочу сохранить свои инструкции в Enum, интерфейс команд в настоящее время выглядит так.
interface Instruction<IN, OUT, BUILDER> {
<INPUT> Function<Pair<INPUT, INPUT>, Optional<BUILDER>> pairToBuilder()
Function<IN, OUT> extractProperty();
}
так в настоящее время эти биты компиляции проблема возникает, когда дело с фактической реализацией инструкции
public class PeristableInstruction<OUT> implements Instruction<Persistable<Long>, OUT, String>
private final Function<Persitable<Long>, OUT> extractProperty;
private Function<Pair<OUT, OUT>, Optional<String>> pairOptionalFunction;
@Override
public <INPUT> Function<Pair<INPUT, INPUT>, Optional<String>> pairToBuilder() {
return this.pairOptionalFunction;
}
@Override
public Function<Persistable<Long>, OUT> extractProperty()
{
return extractProperty;
}
здесь является реализация extractPair
Pair
просто org.apache.commons.lang3.tuple.Pair
static <OUT, IN> Function<Pair<IN, IN>, Pair<OUT, OUT>> extractPair(final Function<IN, OUT> extract) {
return pair -> Pair.of(extract.apply(pair.getLeft()), extract.apply(pair.getRight()));
}
проблема Конечно, INPUT
не OUT
, но это должно быть, но если я изменю подпись не использовать INPUT
.map
не нравится, и я не могу придумать, как это сделать, основываясь не на этом.
обновления хотя не имеет значение, потому что проблема, как представляется, как указать поле команд, так что это в общем правильно, вот источник инструкции, это содержит некоторые бедных и обнищавшие слои код
SPECIFIC_INSTRUCTION(new PersistableInstructio<>(Persistable::Long, Long::toString, Builder::new));
private final Optional<PersistableInstruction<?>> instruction;
PersistableInstructions(final PersitableInstruction<?> instruction)
{
this.instruction = Optional.ofNullable(instruction);
}
public static Stream<PersistableInstruction<?>> instructions() {
return Stream.of(PersistableInstructions.values())
.map(PersistableInstructions::getInstruction)
.filter(Optional::isPresent)
.map(Optional::get);
}
public Optional<PersistableInstruction<?>> getInstruction()
{
return instruction;
}
Родовой цель заключается для предоставления перечисления инструкций, которые могут быть предоставлены в Необязательный или Stream map
.
Я успешно встраиваемые ссылки метод и функцию в карте блоки, пытаясь перебрать эти функции вместо копирования и вставки цепного отображения структуры 100 раз. Как я могу исправить мою структуру дженериков, чтобы предоставить инструкции для реализации сопоставления?
правильный ответ предоставит компилятивный код, который не использует литье (так как литье является моим обходным решением).
Я вижу, как '' в' и INPUT' в 'Instruction' - это то, что намеренно? – Kenney
@ Kenney да, потому что у вас в основном есть несколько видов входов, вывод первой вещи - это вход во второй, но первое, что также имеет вариант ввода. использование Long и String здесь предназначено для упрощения примера, преобразования на самом деле являются сложными сущностями. В идеале INPUT, это то же самое, что и OUT, но я не нашел способ сделать это. – xenoterracide
Не могли бы вы добавить код для 'Pair' и' extractPair'? – Kenney