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 を使います。