Я пытаюсь изучить Java 8, у меня есть объекты Cat, Food, CurrentState, Endcome и catService, foodService, resultService. Так что мой метод выглядит следующим образомСервисные вызовы Java 8 и функциональные конструкции
public class Cat {
private Long ownerId;
private Long Id;
public Long getOwnerId() {
return ownerId;
}
public void setOwnerId(Long ownerId) {
this.ownerId = ownerId;
}
public Long getId() {
return Id;
}
public void setId(Long id) {
Id = id;
}
public CurrentState findActiveCurrentState() {
return new CurrentState();
}
}
class CurrentState {
Long outcomeId;
public Long getOutcomeId() {
return outcomeId;
}
public void setOutcomeId(Long outcomeId) {
this.outcomeId = outcomeId;
}
Outcome findByOutcomeId(Long outcomeId) {
return new Outcome();
}
}
class Food {
}
class Outcome {
Long outcomeId;
List<String> types;
public List<String> getTypes() {
types = new ArrayList<>();
types.add("Food");
types.add("Bath");
return types;
}
public void setTypes(List<String> types) {
this.types = types;
}
}
class CatService {
Optional<Cat> findByOwnerId(Long ownerId) {
return Optional.of(new Cat());
}
public void eatFood(Food food) {
}
}
class FoodService {
Food find(Long catId) {
return new Food();
}
class FoodEventService {
private CatService catService = new CatService();
private FoodService foodService = new FoodService();
public void processCatCanEatFoodEvent(Long ownerId) {
Optional<Cat> cat = catService.findByOwnerId(ownerId);
if (cat.isPresent()) {
//dont worry about the findActiveCurrentState(),its not really important
CurrentState currentState = cat.get().findActiveCurrentState();
Food food = foodService.find(cat.get().getId());
Outcome outCome = currentState.findByOutcomeId(currentState.getOutcomeId());
if (outCome.getTypes().contains("Food")) {
catService.eatFood(food);
}
}
}
}
}
я попытался абстрагироваться каждый из этих вызовов служб к функции и затем использовать компоновать и andThen, но не уверен, будет ли он работать или его правильный путь. Поэтому любая помощь будет оценена, поэтому я ищу метод рефакторинга методаCatCanEatFoodEvent. как вы просили в комментарии, обновили класс.
Не имея полного, компилируемого примера для игры, вам очень сложно помочь. Я мог бы рассказать вам кое-что о 'cat.ifPresent (c -> {...}); но я бы не захотел опубликовать код, который я не скомпилировал первым. Риск ошибок слишком велик. –
Обновлено, пожалуйста, см. – user1224036
Почему «CatService» питается едой? Почему 'CurrentState' нуждается в собственном' resultId', переданном себе вызывающим устройством 'findByOutcomeId'? И почему вы хотите «абстрагировать каждый из этих вызовов сервисов на функцию, а затем использовать compose и andThen»? Что вы ожидаете от этого действия? – Holger