74

私のファイルを解析した後、「s」にはAttributeGet:1,16,10106,10111

したがって、attributeIDGetリストのコロンの後のすべての数字を取得する必要があります。私はそれを行ういくつかの方法があることを知っています。しかし、直接変換List<String>List<Integer>できる方法はあります 以下のコードは型の不一致について文句を言っているので、Integer.parseIntを実行しようとしましたが、これはListでは機能しないと思います。ここでsは文字列です。

private static List<Integer> attributeIDGet = new ArrayList<Integer>();

if(s.contains("AttributeGet:")) {
    attributeIDGet = Arrays.asList(s.split(":")[1].split(","));
}
4

14 に答える 14

86

Java8 の使用:

stringList.stream().map(Integer::parseInt).collect(Collectors.toList());
于 2016-05-06T13:17:06.773 に答える
75

いいえ、配列をループする必要があります

for(String s : strList) intList.add(Integer.valueOf(s));
于 2012-05-22T17:12:01.467 に答える
11

ラムダの使用:

strList.stream().map(org.apache.commons.lang3.math.NumberUtils::toInt).collect(Collectors.toList());

于 2015-10-19T14:53:35.263 に答える
8

いいえ、各要素を反復処理する必要があります。

for(String number : numbers) {
   numberList.add(Integer.parseInt(number)); 
}

これが発生する理由は、あるタイプのリストを別のタイプに変換する簡単な方法がないためです。一部の変換は不可能であるか、特定の方法で行う必要があります。基本的に、変換は関連するオブジェクトと変換のコンテキストに依存するため、「万能」なソリューションはありません。たとえば、CarオブジェクトとオブジェクトがあるとしPersonます。List<Car>本当に意味がないので、 aを a にList<Person>直接変換することはできません。

于 2012-05-22T17:10:07.377 に答える
7

Google Guava ライブラリを使用している場合、これが可能です。Lists#transformを参照してください。

    String s = "AttributeGet:1,16,10106,10111";


    List<Integer> attributeIDGet = new ArrayList<Integer>();

    if(s.contains("AttributeGet:")) {
        List<String> attributeIDGetS = Arrays.asList(s.split(":")[1].split(","));
        attributeIDGet =
        Lists.transform(attributeIDGetS, new Function<String, Integer>() {
            public Integer apply(String e) {
                return Integer.parseInt(e);
            };
        });
    }

うん、肥大化しているがスタイリッシュだという上記の回答に同意します。しかし、それは別の方法です。

于 2012-05-22T17:17:55.490 に答える
3

Java 8 のラムダの使用が許可されている場合は、次のコード サンプルを使用できます。

final String text = "1:2:3:4:5";
final List<Integer> list = Arrays.asList(text.split(":")).stream()
  .map(s -> Integer.parseInt(s))
  .collect(Collectors.toList());
System.out.println(list);

外部ライブラリは使用しません。普通の古い新しいJava!

于 2014-05-05T14:43:05.537 に答える
1

いいえ、(私が知っている) Java でそれを行う方法はありません。

基本的に、各エントリを String から Integer に変換する必要があります。

あなたが探しているものは、変換関数を渡してリストのすべての要素に適用できる、より機能的な言語で実現できます...しかし、それは不可能です(リスト内のすべての要素に適用されます) )。

やり過ぎ:

ただし、Google Guava の関数 (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Function.html) を使用して、より機能的なアプローチをシミュレートすることができます。あなたが探しているものです。

リストを 2 回繰り返すのが心配な場合は、分割する代わりにトークナイザーを使用し、リストに追加する前に各整数トークンを Integer に変換します。

于 2012-05-22T17:12:17.853 に答える
0

グアバの力を示す別の例を次に示します。これは私がコードを書く方法ではありませんが、Guava が Java に提供する関数型プログラミングの種類を示すために、すべてをまとめたかったのです。

Function<String, Integer> strToInt=new Function<String, Integer>() {
    public Integer apply(String e) {
         return Integer.parseInt(e);
    }
};
String s = "AttributeGet:1,16,10106,10111";

List<Integer> attributeIDGet =(s.contains("AttributeGet:"))?
  FluentIterable
   .from(Iterables.skip(Splitter.on(CharMatcher.anyOf(";,")).split(s)), 1))
   .transform(strToInt)
   .toImmutableList():
   new ArrayList<Integer>();
于 2012-05-23T23:49:38.710 に答える