byte[] を IntStream で、、、

byte配列 を IntStream として処理する方法、

int配列 ならば、

    int[] i = { 25, 26, 27, 28 };
    Arrays.stream(i)

は、成立するが、

     byte[] b = { 25, 26, 27, 28 };
     Arrays.stream(b)

というのは成立しない。それでも byte配列 を IntStream として処理したい時はどうするか?
同じ悩みを抱えた人はいたみたいで、以下、stackoverflow に、策が載ってました。
stackoverflow.com
byte配列 なんだから、ByteArrayInputStream で処理するというのも自然と納得はするけど、一手多くて
どうもスッキリしません。

byte[] b = { 25, 26, 27, 28 };

ByteArrayInputStream inst = new ByteArrayInputStream(b);
String result = IntStream.generate(inst::read).limit(inst.available())
                .mapToObj(i->String.format("%02X", i))
                .collect(Collectors.joining(" "));

これで、result は、、

19 1A 1B 1C

にはなります。

やはり1つの実行文で、、、

byte[] b = { 25, 26, 27, 28 };

String result = IntStream.range(0, b.length).mapToObj(i->String.format("%02X", b[i]))
                .collect(Collectors.joining(" "));

で、、、

19 1A 1B 1C

の方が、スマートです。

stackoverflow に書かれたように、つまり、、

    IntStream.range(0, b.length).map(i->b[i])

これに尽きるのですが、map変換の目的によっては、map の中で、そのまま、String.format で変換が無理なので、
mapToObj を使います。