2016-04-03 18 views
1

Şu anda, kaç tane dizeleri gireceğini soran bir programım var ve o zaman bu kadar çok şeyden geçmek ve her birini bir Listeye eklemek için bir IntStream kullanıyorum.Belirli bir miktar giriş istemek ve onlarla bir şeyler yapmak mümkün mü?

final List<String> patterns = new ArrayList<>(); 

final int testCaseNumber = Integer.parseInt(scan.nextLine()); 

IntStream.range(0, testCaseNumber).forEach(i -> patterns.add(scan.nextLine())); 

Sonra, bu listede başka bir şey yapan başka bir akış işlemim var.

patterns.stream().forEach(pattern -> doSomething()); 

tamamen desen List kullanımını atlamak için bir yolu var mı ve sadece doğrudan nihai forEach() açıklamaya IntStream gitmek?

mapToObj() ve peek() kullanmayı denedim, ancak bunların olmasını istediğim şekilde çalışmıyor.

cevap

3

Sadece Bu IntStream girdilerin istenilen sayıda 0'dan gidiş oluşturur ve kullanıcı mapToObj ile giriyor içine ne olanların her eşler

IntStream.range(0, testCaseNumber) 
     .mapToObj(i -> scan.nextLine()) 
     .forEach(input -> doSomething(input)); 

olabilir. Öte yandan

, önce tüm girdileri toplamak ve daha sonra onları işlemek istiyorsanız o zaman bu depolamak gerekir: bu durumda, kullanmak için özel bir nedeni gerçekten olduğunu

List<String> inputs = 
    IntStream.range(0, testCaseNumber) 
      .mapToObj(i -> scan.nextLine()) 
      .collect(Collectors.toList()); 
// ... 
inputs.forEach(input -> doSomething(input)); 

Not Akış API'sı ve muhtemelen basit bir for döngüsünü kullanmanız daha iyi olur.