有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从Collection<Long>到LongStream的直接转换

我有一个Collection<Long>(从Map<UUID, Long>values()方法获得),我想把它转换成LongStream

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

LongStream stream = map.values().stream().mapToLong(Long::longValue);

然而,让我印象深刻的是,应该有一种更简单的方法从盒装等价物的集合中获取原始流

我检查了StreamSupport,只能找到StreamSupport.longStream(Spliterator.OfLong spliterator, boolean parallel),但似乎也没有一种简单的方法从Collection<Long>获取OfLong拆分器实例

当然,我可以创建自己的实用程序函数来执行上述mapToLong功能,但如果有内置功能,我宁愿使用它。如果已经有人问过,我也要道歉——我搜索了一下,但什么也找不到


共 (2) 个答案

  1. # 1 楼答案

    使用mapToLong并不是那么复杂,所以简单的方法不会有太大的区别

    问题是,即使你知道你有一个Collection<Long>,它仍然是一个Collection的对象。现在,如果有一个LongCollection类,可能会有一个toLongStream()方法,但那会有其他问题

  2. # 2 楼答案

    LongStream stream = map.values().stream().mapToLong(Long::longValue);
    

    标准库中没有快捷方式(或方便的转换方法)。我不认为你提到的方法有任何错误或冗长。这很简单,也很简单,你为什么还要找别的东西呢

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

    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() {}
    }