先来看下面这段代码:

    1. public static void main(String[] args) {
    2. Object[] res = Stream.of(1,2,3,4,5,6,7,8).filter( i -> i%2 == 0).filter( i -> i>3).toArray();
    3. System.out.println(Arrays.toString(res));
    4. }

    我们可以在 Stream 操作处打上断点,逐步查看结果,就像这样:

    Stream Trace - 图1

    我们需要各种单步调试,不是很直观,我们迫切的需要个一览视图,让我们快速查看我们的 Stream 结果

    可视化调试

    同样先选择行断点,以 Debug 模式进入程序:

    Stream Trace - 图2

    接下来会弹出 Stream Trace,整个 Stream 操作尽显眼前

    Stream Trace - 图3

    同样可以点击左下角的 Flat Mode 按钮,将整个视图扁平化

    Stream Trace - 图4

    在实际业务中,我们通常对集合进行各种 Stream 操作,我们再来个复杂一些的例子:

    1. List<Optional<Customer>> customers = Arrays.asList(
    2. Optional.of(new Customer("日拱一兵", 18)),
    3. Optional.of(new Customer("卑微的小开发", 22)),
    4. Optional.empty(),
    5. Optional.of(new Customer("OOT", 21)),
    6. Optional.empty(),
    7. Optional.of(new Customer("温柔一刀", 23)),
    8. Optional.empty()
    9. );
    10. long numberOf65PlusCustomers = customers
    11. .stream()
    12. .flatMap(c -> c
    13. .map(Stream::of)
    14. .orElseGet(Stream::empty))
    15. .filter(c -> c.getAge() > 18)
    16. .count();
    17. System.out.println(numberOf65PlusCustomers);

    同样按照上面的操作得到可视化 Stream Trace 视图,直观了解整个 Stream 流程,查看对象属性等

    Stream Trace - 图5