首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使一条流加倍

使一条流加倍
EN

Stack Overflow用户
提问于 2015-06-11 22:00:05
回答 3查看 976关注 0票数 19

我想要双倍的Stream (没有DoubleStream)。这意味着我从一个流开始,并希望获得一个新的流,其中旧流的每个元素都被流式传输两次。所以1,2,3,4,4,5就是1,1,2,2,3,3,4,4,4,5,5。有这样的流操作吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-11 22:02:00

创建一个内部流,它将包含两次当前元素,并对此流执行flatMap

代码语言:javascript
复制
stream.flatMap(e -> Stream.of(e,e))

如果想要将元素数乘以n,可以创建一个实用方法,如下所示:

代码语言:javascript
复制
public static <T> Stream<T> multiplyElements(Stream<T> in, int n) {
    return in.flatMap(e -> IntStream.range(0, n).mapToObj(i -> e));
    //  we can also use    IntStream.rangeClosed(1, n) 
    //  but I am used to iterating from 0 to n (where n is excluded)
}

(但请尝试为此方法使用更好的名称,因为当前的名称可能不明确)

使用示例:

代码语言:javascript
复制
multiplyElements(Stream.of(1,2), 3).forEach(System.out::println);

输出:

代码语言:javascript
复制
1
1
1
2
2
2
票数 30
EN

Stack Overflow用户

发布于 2015-06-11 22:02:03

您可以为每个原始元素创建一个包含2个元素的流,并对其执行flatMap操作:

代码语言:javascript
复制
List<Integer> list = Arrays.asList(1, 2, 3, 4, 4, 5);
List<Integer> doubled = list.stream().flatMap(i -> Stream.of(i, i)).collect(toList());
票数 6
EN

Stack Overflow用户

发布于 2015-06-11 23:12:19

下面是biziclop在评论中描述的一个简单示例。

代码语言:javascript
复制
static <E> Collection<E> multiply(Collection<E> source, int count) {
    return new AbstractCollection<E>() {
        @Override
        public int size() {
            return count * source.size();
        }
        @Override
        public Iterator<E> iterator() {
            return new Iterator<E>() {
                final Iterator<E> it = source.iterator();

                E next;
                int i = 0;

                @Override
                public boolean hasNext() {
                    return i < size();
                }
                @Override
                public E next() {
                    if (hasNext()) {
                        if ((i % count) == 0) {
                            next = it.next();
                        }
                        ++i;
                        return next;
                    } else {
                        throw new NoSuchElementException();
                    }
                }
            };
        }
    };
}

(Ideone上的工作示例。)

CW因为这不是我的主意,flatMap的建议更直接地回答了这个问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30782985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档