Java ArrayList<Integer> 转换为 ArrayList<String> & 反之

3

我想知道如何将ArrayList<String>转换为ArrayList<Integer>

这是我的代码:

ArrayList<String> sNumbers = new ArrayList<String>();
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(1);
numbers.add(2);
numbers.add(3);

sNumbers.add(numbers.toString());
System.out.println(sNumbers);//for testing

我收到了这个信息:
[[1, 2, 3]]

这是我的问题:如何反转这个过程(获取一行数字并将其放入数字 ArrayList 中)
应该是这样的:
sNumbers
0 [1, 2, 3] --> 

numbers
0 [1]
1 [2]
2 [3]
(without brackets) 
5个回答

10

List<Integer> 对象调用 toString 方法将返回该列表的字符串表示形式(例如 "[1,2,3]"),而不是包含其每个元素的字符串表示形式的 List<String>

您必须手动填充您的 String

for (Integer i: numbers) {
    sNumbers.add(String.valueOf(i));
}

注意

Java 8 在声明式编码和命令式编码方面可能有一些更高级的操作 - 不幸的是,我目前没有安装jdk。

希望其他人能够接手并回答关于Java 8的问题。


这是正确的,但我想表达的不是这个意思。当数组数字在变化时,我将其保存到sNumbers中。按照你的方式,我在2个数组之间没有任何分隔符。我只是想避免使用二维数组。 - Jump3r
我理解这个问题的意思是,他们很满意得到ArrayList的字符串表示形式(即单个字符串:“[1, 2, 3]”),他们只想能够反转该过程;将字符串“[1, 2, 3]”转换为具有三个元素1、2和3的ArrayList<Integer>。对我来说,这似乎根本没有回答所提出的问题(显然你的理解不同)。 - Anthony Grist
是的,我同意。当我获取新的数字内容(在保存数字到sNumbers之后,我会清除它),我想把它放到sNumbers数组中,然后我想从数组中选择一行。如果您愿意,我可以粘贴所有代码。 - Jump3r
我仍在通过试错的方式学习Java,我将阅读有关Java 8和集合的内容。Augustin的回答更符合我学习Java的水平。也许我的问题表述不清楚,但感谢大家。 - Jump3r
@Jump3r 不用谢。我建议你不要在生产代码中使用Austin的解决方案,但是为了学习目的,为什么不呢 :) - Mena
显示剩余3条评论

6
如@mena所提到的,您可以使用以下方法完成:
纯Java:
List<String> sNumbers = new ArrayList<String>();
for (Integer i: numbers) {
    sNumbers.add(String.valueOf(i));
}

JDK 8 - 映射:

List<String> sNumbers = numbers.stream().map(
    n -> n.toString()).collect(Collectors.toList()
);

或者使用guava库,它类似于JDK8。

我认为你可以在这里找到更多的示例: 将List<String>直接转换为List<Integer>


为Java 8这部分打个赞! - Mena

2
这是一个简单的算法,可以将数组的字符串表示转换回数组。
public static ArrayList<Integer> arrayStringToIntegerArrayList(String arrayString){
    String removedBrackets = arrayString.substring(1, arrayString.length() - 1);
    String[] individualNumbers = removedBrackets.split(",");
    ArrayList<Integer> integerArrayList = new ArrayList<>();
    for(String numberString : individualNumbers){
        integerArrayList.add(Integer.parseInt(numberString.trim()));
    }
    return integerArrayList;
}

你需要使用以下方式进行调用:
System.out.println(arrayStringToIntegerArrayList(sNumbers.get(0)));

它将返回一个带有值[1, 2, 3]ArrayList<Integer>


1
只需循环遍历数组。
for(int i : numbers ) sNumbers.add(String.valueOf(i));

0
你可以使用以下循环:
//number 1
for(Integer number : numbers){
            sNumbers.add(String.valueOf(number));
    }

//number 2
for(int i = 0; i < numbers.size(); i++){
    sNumbers.add(String.valueOf(numbers.get(i)));
}

//number 3
int j = 0;
while(numbers.size() > j){
    sNumbers.add(String.valueOf(numbers.get(j)));
    j++;
}

//number 4  
Iterator<Integer> iterator = numbers.iterator();
while(iterator.hasNext()){
    sNumbers.add(String.valueOf(iterator.next()));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接