小编典典

是否可以在 Java 8 中转换流?

all

是否可以在 Java 8 中转换流?假设我有一个对象列表,我可以执行以下操作来过滤掉所有其他对象:

Stream.of(objects).filter(c -> c instanceof Client)

不过,在此之后,如果我想对客户做点什么,我需要对他们每个人进行强制转换:

Stream.of(objects).filter(c -> c instanceof Client)
    .map(c -> ((Client) c).getID()).forEach(System.out::println);

这看起来有点难看。是否可以将整个流转换为不同的类型?像投到Stream<Object>一个Stream<Client>

请忽略这样一个事实,这样做可能意味着糟糕的设计。我们在我的计算机科学课上做这样的事情,所以我正在研究 java 8 的新特性,并且很好奇这是否可能。


阅读 59

收藏
2022-07-09

共1个答案

小编典典

我不认为有办法做到开箱即用。一个可能更清洁的解决方案是:

Stream.of(objects)
    .filter(c -> c instanceof Client)
    .map(c -> (Client) c)
    .map(Client::getID)
    .forEach(System.out::println);

或者,正如评论中所建议的,您可以使用该cast方法 - 前者可能更容易阅读:

Stream.of(objects)
    .filter(Client.class::isInstance)
    .map(Client.class::cast)
    .map(Client::getID)
    .forEach(System.out::println);
2022-07-09