【问题标题】:How to convert List<String> to List<Integer>?如何将 List<String> 转换为 List<Integer>?
【发布时间】:2013-08-03 19:46:11
【问题描述】:

我在List&lt;String&gt; 中得到常量字符串。我需要List&lt;Integer&gt;。以基本的方式, 我将迭代并转换为 Integer。

有没有更好的解决方案?

【问题讨论】:

  • 什么常量? "123",是这样的吗?
  • 恐怕您必须创建新列表并解析并将每个元素添加到新列表中
  • 从未听说有任何更好(无论更好是什么意思)解决方案。
  • 为什么会被否决?这是个好问题。

标签: java string list generics


【解决方案1】:

不行,没有别的办法。

但在这种情况下无法进行强制转换,您需要使用Integer.parseInt(stringValue)

List<String> listStrings = ... 
List<Integer> listIntegers = new ArrayList<Integer>(listStrings.size());
for(String current:listStrings){
  listIntegers.add(Integer.parseInt(current));
}

【讨论】:

  • 可以这样使用吗?在将列表分配给 List. 之后,首先分配 List list = listStrings
  • 你试过了吗?
【解决方案2】:

没有明确和直接的方法来更改集合的参数化类型。您应该创建另一个并在修改数据时传输数据。

【讨论】:

    【解决方案3】:

    反过来已经是answered

    看起来循环是唯一的选择。如果您不“想要”自己循环,可以使用一些类(例如来自 Apache Commons)。

    【讨论】:

      【解决方案4】:

      这不仅仅是转换的问题,因为 StringInteger 是根本不同的对象。

      您必须遍历列表并将每一个解析为一个新的整数:

      List<Integer> intList = new ArrayList<Integer>();
      for(String numeric : stringList)
      {
          intList.add(Integer.parseInt(numeric));
      }
      

      【讨论】:

        【解决方案5】:

        有办法做到这一点。

        您可以使用Adapter Pattern 并创建一个implements List&lt;Integer&gt; 的类,但在内部访问您的List&lt;String&gt; 转换整数和字符串之间的值。只要您履行所有合同,任何需要 List&lt;Integer&gt; 的 API 都可以像使用原生 List&lt;Integer&gt; 一样使用此类。

        这可能看起来很麻烦且效率低下,但是当您需要将 List&lt;Integer&gt; 传递给仅访问列表的某些值的 API 时,按需强制转换其中一些值会更有效(“惰性求值” ) 而不是全部投射。它还可以节省内存,因为您不会同时在内存中同时拥有整个列表的字符串和整数表示形式。

        【讨论】:

        • 你在思考模式。我喜欢这样。
        • 这是一个创造性的答案,实际上让这个问题值得:)
        【解决方案6】:
        for(String str : listOfString) {
            listOfInteger.add(Integer.valueOf(str));
        }
        

        没有直接的方法可以做到这一点。

        【讨论】:

          【解决方案7】:

          Google Guava's Lists类,你可以这样做:

          List<Integer> result = Lists.transform(stringList, new Function<String, Integer>() {
              @Override
              public Integer apply(@Nullable String input) {
                  return Integer.parsInt(input)
              }
          });
          

          据我所知,它会懒惰地转换每个项目。

          【讨论】:

            【解决方案8】:

            使用guava

            List<String> strings = Lists.newArrayList("1", "2", "3");
            List<Integer> ints = Lists.transform(strings, new Function<String, Integer>(){
                public Integer apply(String input) {
                    return Integer.valueOf(input);
                }
            });
            

            【讨论】:

            • 或者对于 Guava 16.0+:new ArrayList&lt;&gt;(Lists.transform(listOfStrings, Longs.stringConverter()))
            • @LateralFractal:可能更短,只是:Lists.transform(listOfStrings, Ints.stringConverter())
            【解决方案9】:

            Java 8 有一些新的解决方案:

            List<Integer> listOfIntegers = listOfStrings.stream().map(Integer::valueOf).collect(Collectors.toList());
            

            【讨论】:

              猜你喜欢
              • 2010-09-06
              • 2022-09-30
              • 2012-05-29
              • 2023-03-26
              • 1970-01-01
              • 1970-01-01
              • 2020-01-11
              相关资源
              最近更新 更多