2014-10-11 13 views
11

Şu anda Java'yı kullanmayı öğreniyorum ve arkadaşım Java 8'i kullanırken bu kod bloğunun basitleştirilebileceğini söyledi. parseIntArray'un sadeleştirilebileceğine dikkat çekti. Bunu Java 8'de nasıl yaparsınız? ÖrneğinBir dizi dizisini Java 8 kullanarak bir int dizisine dönüştürmenin en kolay yolu nedir?

public class Solution { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     String[] tokens = input.nextLine().split(" "); 
     int[] ints = parseIntArray(tokens); 
    } 

    static int[] parseIntArray(String[] arr) { 
     int[] ints = new int[arr.length]; 
     for (int i = 0; i < ints.length; i++) { 
      ints[i] = Integer.parseInt(arr[i]); 
     } 
     return ints; 
    } 
} 

cevap

30

:

static int[] parseIntArray(String[] arr) { 
    return Stream.of(arr).mapToInt(Integer::parseInt).toArray(); 
} 

Yani String[] bir Stream alır. Her öğe için Integer.parseInt'u aramak için mapToInt kullanın ve int'a dönüştürün. Ardından, diziyi döndürmek için sonuçta IntStream üzerinde toArray numaralı telefonu arayın.

+0

Vay canına! Bu java mı? Kesinlikle bu benim çözümümden daha düzenli. Hızlı yanıt için teşekkürler! –

+1

@IrvinDenzelTorcuato Java 8, evet. –

+0

'Tamsayı :: parseInt' ne' '' burada çalışıyor? –

18

Sen belirteci String[] dizisi oluşturarak atlayabilirsiniz:

Pattern.compile(" ") sonucu hatırladı ve tabii ki, tekrar tekrar kullanılabilir
Pattern.compile(" ") 
     .splitAsStream(input.nextLine()).mapToInt(Integer::parseInt).toArray(); 

.

+3

Vay, nifty. SplitAsStream' bilemedim. –

1

Sen de, bir bölünme doğrudan diziyi elde edebilir: Burada

String input; //Obtained somewhere 
... 
int[] result = Arrays.stream(input.split(" ")) 
     .mapToInt(Integer::valueOf) 
     .toArray(); 

, Arrays bir diziden akışı elde etmek için bazı güzel yöntemler vardır, bu nedenle çağrısında doğrudan ayırabilirsiniz. Bundan sonra, IntStream ve toArray'u istediğiniz int dizisi için Integer::valueOf ile mapToInt ile arayın.

İlgili konular