2016-03-29 18 views
4

Bazı listeler tamsayılar içeren ve bazı listelerde çiftler içeren yer ayrılmış sayı listelerini ayrıştırmam gerektiğini varsayalım. Tekrarlamayı azaltmak için aşağıdaki işlevleri genelleştirmek için iyi bir yol ne olurdu? Bunun Generics için iyi bir kullanım örneği olabileceğini mi düşünüyordum? Eğer bir String alır ve istenilen tür döndüren fonksiyonu (örn java.util.function.Function veya com.google.common.base.Function) çeşit varsaJava: DRYness'i İyileştirmek İçin Dize Ayrıştırma İçin Generics'i Kullanma

public static ArrayList<Integer> stringToIntList(String str) 
{ 
    String[] strs = str.split("\\s"); 
    ArrayList<Integer> output = new ArrayList<Integer>(); 
​ 
​ 
    for (String val : strs) 
    { 
     output.add(Integer.parseInt(val)); 
    } 
​ 
    return output; 
} 
​ 
public static ArrayList<Double> stringToDoubleList(String str) 
{ 
    String[] strs = str.split("\\s"); 
    ArrayList<Double> output = new ArrayList<Double>(); 
​ 
​ 
    for (String val : strs) 
    { 
     output.add(Double.parseDouble(val)); 
    } 
​ 
    return output; 
} 

cevap

4

Sen jenerik ile yapabilirsiniz.

static <T> ArrayList<T> stringToList(
    String str, Function<? super String, ? extends T> fn) { 
    String[] strs = str.split("\\s"); 
    ArrayList<T> output = new ArrayList<>(); 
    for (String val : strs) 
    { 
     output.add(fn.apply(val)); 
    } 
    return output; 
} 
3

Java 8 ile, oldukça özlü olabilir:

static <T> List<T> convertToList(
     String string, Function<String, T> function) { 
    return Pattern.compile("\\s").splitAsStream(string) 
      .map(function).collect(Collectors.toList()); 
} 

public static void main(String[] args) { 
    String s = "3 4"; 
    System.out.println(convertToList(s,Double::parseDouble)); // [3.0, 4.0] 
    System.out.println(convertToList(s,Integer::parseInt)); // [3, 4] 
} 

Bunu değişmez zaman da Desen sabit yapabilirsiniz.

+0

Bunu denediğinizde, işlevin bir 'List ' yerine bir 'List ' döndürdüğünü söyleyen bir hata alıyorum. Orada bir oyuncuya mı ihtiyacım var? –

+0

@ evan058 bunu nasıl adlandırıyorsunuz? T döndüren bir işlevi geçmeniz gerekir, ancak T Nesne ise List user140547

+0

alırsınız IntelliJ kullanıyorum ve IDE bu hatayı atıyor. Fonksiyonu daha yeni tanımladım ve diyor ki: Uyumsuz Türler: Gerekli: 'List '; Bulunanlar ' –

İlgili konular