Android - 将String []转换为int [](或将ArrayList <string>转换为ArrayList <integer>)的优雅方法

时间:2016-03-17 07:54:55

标签: java android arrays string arraylist

我正在构建一个Android应用程序,我收到一个数字消息,用逗号分隔符分隔。输入的示例如下:

1,2,3,4,1,2,31,12,13,16

我接收到它并将其指定为String,然后使用split方法生成String []:

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()期望单个字符串输入而不是几个数组元素。

我知道我可以为每个循环这样花哨:

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 []转换的类型。

5 个答案:

答案 0 :(得分:1)

在lambda之前,我通过创建转换器接口和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);

}
})

显然,每次需要时都不需要实例化转换器,可以为常用转换器创建单例

答案 1 :(得分:0)

String line = scanner.nextLine();
String[] numberStrs = line.split(",");
int[] numbers = new int[numberStrs.length];

for(int i = 0;i < numberStrs.length;i++) {
    /*
     * Note that this is assuming valid input
     * If you want to check then add a try/catch 
     * and another index for the numbers if to continue adding the others
     */
    numbers[i] = Integer.parseInt(numberStrs[i]);
}

答案 2 :(得分:0)

您是否希望使用lambda表达式? (这需要导入class MyConnectionProvider implements ConnectionProvider { @Override public Connection acquire() { return ServiceConnectionManager.getConnection(); } @Override public void release(Connection connection) { try { connection.close(); } catch (SQLException e) { throw new DataAccessException("Error while closing", e); } } }

RxJava

答案 3 :(得分:0)

String str = "[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]";
int[] arr = Arrays.stream(str.substring(1, str.length()-1).split(",")).map(String::trim).mapToInt(Integer::parseInt).toArray();
System.out.println(Arrays.toString(arr));

答案 4 :(得分:0)

使用retrolambdaa little library for functional things

List<Integer> res = FuncIter
    .iter(input.split(","))
    .map(Integer::valueOf)
    .collect();

Nota:retrolambda为您提供了java 8中的函数引用和lambdas.FuncIter库是一个非常简单的高阶函数集合,如map