aNNiMON off
let live
У класса Class есть методы-аналоги instanceof и приведения типов. Первое: Class.isInstance и Class.isAssignableFrom, и второе: Class.cast.
Поправил описание.
Naik off
aNNiMON, map(Parent.class::cast), магия какая-то :gg: , но вставить можно.

Теперь нужно описание поправить
aNNiMON off
let live
Naik, кстати, приведение типа можно сделать ссылкой на метод:
map(Parent.class::cast)

Нет, в том куске нужно приведение типов.
Naik off
Вообще на java 7 код намного понятнее вышел бы - условие + цикл
Naik off
Не знаю как у тебя компилится эта строка, е меня требует приведение
.map(n -> (T) findById(parent, cssId))
Naik off
aNNiMON,
  1. public static Set<Node> findByCssClass(Parent root, String cssClass) {
  2.     Set<Node> result = new HashSet<>(root.lookupAll(cssClass));
  3.     root.getChildrenUnmodifiable().stream()
  4.             .filter(n -> n instanceof Parent)
  5.             .map(n -> (Parent) n)
  6.             .forEach(n -> result.addAll(findByCssClass(n, cssClass)));
  7.     return result;
  8. }
  9.  
  10. @SuppressWarnings("unchecked")
  11. public static <T extends Node> T findById(Parent parent, String cssId) {
  12.     return (T) Optional.ofNullable(parent.lookup(cssId))
  13.             .orElse(parent.getChildrenUnmodifiable().stream()
  14.                     .filter(n -> n instanceof Parent)
  15.                     .map(n -> (T) findById((Parent) n, cssId))
  16.                     .filter(n -> n != null)
  17.                     .findFirst()
  18.                     .orElse(null));
  19. }
aNNiMON off
let live
Naik, ну поправь там как следует, да я отредактирую.
Naik off
Кстати в коде ошибка - если оно ничего не найдет, то будет исключение, надо бы null возвращать
Naik off
aNNiMON, не знал о таком :gg: Можешь код поменять на свой.

Но если без автоопределения типа, то с передачей class лучше смотрится.
aNNiMON off
let live
Можно полностью функциональщину использовать:
  1. public static <T extends Node> T findById(Parent parent, String cssId) {
  2.     return (T) Optional.ofNullable(parent.lookup(cssId))
  3.             .orElse(parent.getChildrenUnmodifiable().stream()
  4.                     .filter(n -> n instanceof Parent)
  5.                     .map(n -> (T) findById(parent, cssId))
  6.                     .filter(n -> n != null)
  7.                     .findFirst().get()
  8.             );
  9. }
Всего: 13
1 2 >>

Реклама

Мы в соцсетях

tw tg yt gt