如何从字节数组创建IntStream?

时间:2014-11-28 02:16:30

标签: lambda java-8 java-stream

我已经知道只有IntStreamLongStream。如何从字节数组中创建IntStream

目前我打算这样做。

static int[] bytesToInts(final byte[] bytes) {
    final int[] ints = new int[bytes.length];
    for (int i = 0; i < ints.length; i++) {
        ints[i] = bytes[i] & 0xFF;
    }
    return ints;
}

static IntStream bytesToIntStream(final byte[] bytes) {
    return IntStream.of(bytesToInt(bytes));
}

有没有更容易或更快的方法呢?

3 个答案:

答案 0 :(得分:8)

Radiodef的一个变种答案:

static IntStream bytesToIntStream(byte[] bytes) {
    return IntStream.range(0, bytes.length)
        .map(i -> bytes[i] & 0xFF)
    ;
}

也更容易保证并行化。

答案 1 :(得分:1)

您可以执行类似

的操作
static IntStream bytesToIntStream(byte[] bytes) {
    AtomicInteger i = new AtomicInteger();
    return IntStream
        .generate(() -> bytes[i.getAndIncrement()] & 0xFF)
        .limit(bytes.length);
}

但它不是很漂亮。 (但它并不是那么糟糕:AtomicInteger的使用允许流并行运行。)

答案 2 :(得分:1)

一行代码:

import com.google.common.primitives.Bytes;
IntStream in = Bytes.asList(bytes).stream().mapToInt(i-> i & 0xFF);