我正在构建一个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 []转换的类型。
答案 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)
使用retrolambda和a little library for functional things:
List<Integer> res = FuncIter
.iter(input.split(","))
.map(Integer::valueOf)
.collect();
Nota:retrolambda为您提供了java 8中的函数引用和lambdas.FuncIter库是一个非常简单的高阶函数集合,如map
。