3

コードを単純化しようとしていますが、質問があります。コマで区切られたIDの文字列を特定のコレクションタイプに変換することは可能ですか?

したがって、私のコードは次のようになります。

String [] condition_list_id_tmp = rule.getContractRuleConditions().split(",");
List<String> condition_list_id = Arrays.asList(condition_list_id_tmp);
List<Long> condition_ids = new ArrayList<Long>();
    for (String str_id : condition_list_id){
         condition_ids.add(Long.parseLong(str_id));
    }

Type collectionType = new TypeToken<List<Long>>() {}.getType();たとえばgsonのように使用して、このコードを簡略化できますか?

4

6 に答える 6

2

LambdaJを検討しましたか?

class StringToLong implements Converter<String, Long> {
    public Long convert(String str) {
        return Long.parseLong(str);
    }
}

String [] condition_list_id_tmp = rule.getContractRuleConditions().split(",");
List<String> condition_list_id = Arrays.asList(condition_list_id_tmp);
List<Long> condition_ids = convert(condition_list_id, new StringToLong());
于 2012-07-18T14:49:51.080 に答える
1

またはグアバのようないくつかのライブラリを使用していますか?あなたのコード(しかし彼らのコード)にループがないように?あなたがあなたの目標は「私のコードを単純化すること」だと言っているのを見ました

例えば

final List<String> strList = Arrays.asList("1,2,3,4,5".split(","));
final List<Long> l = Lists.transform(strList, new Function<String, Long>() {
    @Override
    public Long apply(final String input) {
        return Long.parseLong(input);
    }
});
于 2012-07-18T14:40:47.377 に答える
0

私はあなたがこれをすることができなければそうは思わないloopingcollection's 明示的にキャストせずにコンテンツタイプを変更するにはどうすればよいですか。

于 2012-07-18T14:20:51.440 に答える
0

ループせずに利用できる方法はありません。メソッドが利用可能であっても、それは単一の操作としてあなたに見えるでしょうが、明らかにそれはしなければなりません

内部でループします。

例:Arrays.fill(arrayname, intval);

これは、配列を任意の整数値で埋める単一の方法です。ただし、内部的には、アレイ上でループも実行されます。

于 2012-07-18T14:31:15.990 に答える
0

java 8はこれを行うことができます:

String [] condition_list_id_tmp = rule.getContractRuleConditions().split(",");
List<String> condition_list_id = Arrays.asList(condition_list_id_tmp);

List<Long> condition_ids = condition_list_id.map(c -> Long.parseLong(c)) 
于 2012-07-18T14:32:38.670 に答える
0

Java 8が市場に出るまでの問題の解決策は、FunctionalIdiomsをサポートするプロジェクトGuavaである可能性があります。

次に、その操作を別の方法で実行できますが、コメントに書いたように。最後に、同じ操作を行います。

public static List<Long> splitToLong(String list, String token) {

  StringTokenizer tokenizer= new StringTokenizer(list, token);
  List<Long> result = new ArrayList<Long>();
  while(tokenizer.hasMoreTokens() {
     result.add(Long.parseLong(tokenizer.nextToken()));
  }
}

このメソッドをUtilクラスに入れると、クリーンなコードを楽しむことができます

 //....

 for(Long mLong : StringHelper.splitToLong(message,",")) {
    //Do something with mLong
 }

 //....
于 2012-07-18T14:47:25.500 に答える