从Collection <Long>直接转换为LongStream

Dzi*_*eIT 3 java java-8 java-stream

我有一个Collection<Long>(从Map<UUID, Long>values()方法获得),我想将其转换为LongStream

我能想到的最简单的方法是:

LongStream stream = map.values().stream().mapToLong(Long::longValue);
Run Code Online (Sandbox Code Playgroud)

但是,令我惊讶的是,应该有一种更简单的方法来从盒装等效项的集合中获取原始流。

我检查了一下StreamSupport,只能找到StreamSupport.longStream(Spliterator.OfLong spliterator, boolean parallel),但是似乎没有一种简单的方法可以OfLongCollection<Long>任何一个中获取一个splitter实例。

我当然可以创建自己的实用程序函数来执行上述mapToLong功能,但是如果有内置功能,我宁愿使用它。如果已经提出要求,我们也很抱歉-我进行了搜索,但什么也没找到。

And*_*lko 5

LongStream stream = map.values().stream().mapToLong(Long::longValue);
Run Code Online (Sandbox Code Playgroud)

标准库中没有快捷方式(或方便的转换方法)。我没有看到您提到的方法有任何错误或冗长的内容。这很简单明了,为什么还要寻找其他东西?

您可以创建自己的实用程序类来支持它,尽管我认为这不会有太大帮助。

public final class Streams {
    public static LongStream toLongStream(Stream<Long> stream) {
        return stream.mapToLong(Long::longValue);
    }

    public static Stream<Long> toStreamLong(LongStream stream) {
        return stream.boxed();
    }

    private Streams() {}
} 
Run Code Online (Sandbox Code Playgroud)