我正在构建一个 Android 应用程序,我在其中收到一条由数字组成的消息,以逗号分隔符分隔。示例输入为:
1,2,3,4,1,2,31,12,13,16
然后我收到这个并将其分配为一个字符串,然后使用 split 方法创建一个字符串[]:
String input = "1,2,3,4,1,2,31,12,13,16";
String[] arrayInput = input.split(",");
现在我有了输入的数组版本。接下来我要做的是将其转换为 int[]
以实现优雅编码的主要目的。
现在,我不能去:
int[] aGroup = Arrays.copyOfRange(arrayInput, 0, 3);
因为我会得到类型不匹配。为了变聪明,我尝试了:
int[] aGroup = Integer.valueOf(Arrays.copyOfRange(arrayInput, 0 ,3));
但是 Integer.valueOf()
需要单个字符串输入而不是多个数组元素。
我知道我可以像这样使用花哨的 for-each 循环:
List<Integer> arrayInputInt = new ArrayList<Integer>();
for(String entry : arrayInput){
arrayInputInt.add(Integer.valueOf(entry));
}
或类似的东西。虽然这个 for-each 循环看起来干净优雅,但我想知道是否有更优雅、更赏心悦目的一个 String[] 到 int[] 转换器。
编辑
This question因为我的问题可能是这个问题的重复,所以被链接了。题目中的答案使用循环遍历String ArrayList中的每一个元素,尝试解析它们,然后将其转换为Integer并放入Integer ArrayList中。我正在寻找的解决方案是单行无循环使用类型的 String[] 到 int[] 转换。
最佳答案
在 lambda 之前,我通过创建转换器接口(interface)和 convertList 实用方法解决了这个问题,如下所示
interface Converter<S,T>{
T convert(S source);
}
class ListConverter{
static public <S,T> List<T> convertList(List<S> source,Converter<S,T> converter){
List<T> target= new ArrayList<>();
for (S s : source){
target.add(converter(s));
}
return target;
}
}
那么如果你想使用它,你可以这样做
List<Integer> ints = ListConverter.convertList(Arrays.asList(input.split(","),new Converter<String,Integer>(){
public Integer convert(String source){
return Integer.parseInt(source);
}
})
显然你不需要每次都实例化转换器,你可以为普通转换器创建单例
关于java - 将 String[] 转换为 int[](或将 ArrayList<String> 转换为 ArrayList<Integer>)的优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36054531/