这类似于这个问题: 如何在Java中将int []转换为Integer []?
我是Java的新手.我怎么能转换List<Integer>到int[]Java中?我很困惑,因为List.toArray()实际上返回一个Object[],可以强制转换为虚空Integer[]或int[].
现在我正在使用循环来执行此操作:
int[] toIntArray(List<Integer> list){
int[] ret = new int[list.size()];
for(int i = 0;i < ret.length;i++)
ret[i] = list.get(i);
return ret;
}
Run Code Online (Sandbox Code Playgroud)
我相信有更好的方法可以做到这一点.
我正在审查Java 8的API更改,我注意到新方法java.util.Arrays并没有为所有原语重载.我注意到的方法是:
目前,这些新的方法只能处理int,long和double原语.
int,long和double,可能是最广泛使用的原语,所以有意义的是,如果他们必须限制API,他们会选择这三个,但为什么他们必须限制API?
我正在使用 aStream.Builder并且我偶然发现这个接口同时具有方法accept(T t)和add(T t). 唯一的区别是前者返回void,后者返回 a Stream.Builder。
该文档甚至提到这些方法具有相同的默认实现:
默认实现的行为就像:
Run Code Online (Sandbox Code Playgroud)accept(t) return this;
请注意,他们忘记了分号,但那是另一回事了。
我的问题是:为什么他们有两种方法可以向流构建器添加内容?我认为这会使 API 变得混乱,我认为他们想避免这种情况。
有什么令人信服的理由这样做吗?
在Android Java世界中,是否有一种直接(理想情况下是一次调用)方式将数组转换int为a ArrayList<Integer>和back?调用toArray()ArrayList返回一个数组Integer- 不是我想要的.
我可以通过循环手动轻松完成(事实上已经做过).我想知道库/语言是否支持相同.
编辑:谢谢大家,我已经写了自己的拳击手和unboxer.我很惊讶语言/ RTL设计师自己没有想到它,特别是原始类型的设计不符合集合.
为什么ByteArrayOutputStream。close是用throws IOException? 首先,事实上它不能扔任何东西,因为它的身体是空的。其次,在法律上它不能抛出任何东西,因为它的文档说“关闭 ByteArrayOutputStream 没有任何效果”。
这不是(不重要,但仍然)有点错误吗?
是的,我知道它的超类OutputStream实现了Closable,其close方法允许 throw IOException。但是没有人禁止使用没有抛出规范的方法覆盖它(in ByteArrayOutputStream)close。(即使在某些古老的 Java 版本中禁止用更少抛出的方法覆盖更多抛出的方法,现在更改ByteArrayOutputStream.close定义不会是不兼容的更改。)
我有一个byte[],我想制作一个字节流。
对于int[]andlong和double,我在 Arrays 类中看到了方法:
Arrays.stream(int[] array)
Arrays.stream(long[] array)
Arrays.stream(double[] array)
Run Code Online (Sandbox Code Playgroud)
但是,我没有看到任何 method Arrays.stream(byte[] array)。
那么,将字节原语流作为实际字节获取的最简单、最简洁的方法是什么?
我需要对 byte[] 进行转换,并且需要一个字节流来使用所有 Stream 函数来完成此操作(不,我不想将它们全部转换为整数。)
谁有好的解决办法吗?
附言。其他人从微控制器 API 向我提供 byte[] ...所以如果没有必要,我不想使用其他数据类型。
谢谢。
byte[] a = {1,2,3};
System.out.println(Stream.of(a).count());
Byte[] b = {1,2,3};
System.out.println(Stream.of(b).count());
Run Code Online (Sandbox Code Playgroud)
结果是1和3,为什么?
我试图将一个字节数组转换为LinkedList<Byte>:
//data is of type byte[]
List<Byte> list = Arrays.stream(toObjects(data)).boxed().collect(Collectors.toList());
Byte[] toObjects(byte[] bytesPrim) {
Byte[] bytes = new Byte[bytesPrim.length];
Arrays.setAll(bytes, n -> bytesPrim[n]);
return bytes;
}
Run Code Online (Sandbox Code Playgroud)
第一行引发一条错误消息:
该
boxed()类型的方法未定义Stream<Byte>.
知道为什么我会收到此错误消息以及如何规避这个问题吗?
我有一个类型的变量byte[],而不是Byte[].
我正在尝试使用Arrays::stream方法用lambda处理这个数组.
然而,有没有这样的重载Arrays::stream这需要byte[]作为参数.
重新加载Arrays::stream(T[] data)也不起作用.
我猜是因为byte []是java prime类型字节的数组,不能将其视为泛型类型参数T.
我试着投byte[]来Byte[]或int[],而这一切也失败了.
java ×9
java-8 ×3
java-stream ×3
arrays ×2
boxing ×2
collections ×2
android ×1
lambda ×1
stream ×1