Java 8超级类流,父文件,组件父项,链表等

Nat*_*han 4 java java-stream spliterator

我想将以下for语句转换为Java 8流(即Stream<Class<?>>).理想的解决方案将是很简单的,我可以很容易地适应它的各种遍历一个链表的情况(例如File.getParentFile(),Component.getParent()).

  Class<?> clazz;
  Object value;

  value = ...;

  for (clazz = value.getClass(); clazz != null; clazz = clazz.getSuperclass())
     ...
Run Code Online (Sandbox Code Playgroud)

我意识到创建流的几行代码不会比单个for语句简单.但是,流使for循环体更简单,因此需要流.

Tag*_*eev 6

您需要一种takeWhile仅出现在JDK-9中的方法.目前,您可以使用可用的后端口,例如,在我的StreamEx库中:

Stream<Class<?>> stream = StreamEx.iterate(value.getClass(), Class::getSuperClass)
                                  .takeWhile(Objects::nonNull);
Run Code Online (Sandbox Code Playgroud)

在JDK-9中只需替换StreamExStream.