为了账号安全,请及时绑定邮箱和手机立即绑定

使用Java 8 JDK将Iterable转换为Stream

使用Java 8 JDK将Iterable转换为Stream

largeQ 2019-08-26 10:47:00
使用Java 8 JDK将Iterable转换为Stream我有一个返回的界面java.lang.Iterable<T>。我想使用Java 8 Stream API来操纵该结果。但是Iterable不能“流”。知道如何将Iterable用作Stream而不将其转换为List吗?
查看完整描述

3 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

因此,另一个答案提到Guava通过使用以下方式支持:

Streams.stream(iterable);

我想强调一下,实现与其他建议的答案略有不同。如果属于他们Iterable的类型Collection

public static <T> Stream<T> stream(Iterable<T> iterable) {
  return (iterable instanceof Collection)
    ? ((Collection<T>) iterable).stream()
    : StreamSupport.stream(iterable.spliterator(), false);}public static <T> Stream<T> stream(Iterator<T> iterator) {
  return StreamSupport.stream(
    Spliterators.spliteratorUnknownSize(iterator, 0),
    false
  );}


查看完整回答
反对 回复 2019-08-26
?
心有法竹

TA贡献1866条经验 获得超5个赞

解决此问题的一个非常简单的方法是创建一个包含方法的Streamable<T>接口扩展。Iterable<T>default <T> stream()

interface Streamable<T> extends Iterable<T> {
    default Stream<T> stream() {
        return StreamSupport.stream(spliterator(), false);
    }}

现在你Iterable<T>的任何一个都可以通过声明它们implements Streamable<T>来代替它而轻而易举Iterable<T>


查看完整回答
反对 回复 2019-08-26
  • 3 回答
  • 0 关注
  • 1454 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信