2016-10-12 7 views
-3

私はこのコードブロックを持っており、ラムダ式とストリームを使ってこれをループに変換しようとしましたが失敗しました。ラムダとストリームへのループのカバー

for(int i = 0, j = 308; i < 17;i++, j -= 18) { 
      if(consoleMessages[i] != null) { 
       newBoldFont.drawBasicString(consoleMessages[i], 9, j, 16777215, 0); 
      } 
     } 

私はこれを試しましたが、他の多くの方法を試みましたが、私が持っていたものを覚えていません。

Arrays.stream(consoleMessages).forEach(x->{ 
      IntStream.range(308,0).map(inty->inty-=18).forEach(v->{ 
       newBoldFont.drawBasicString(x, 9, v, 16777215, 0); 
       return; 
      }); 
     }); 
+1

あなたが試したことを示してください。 –

答えて

0

あなたが主張する場合...

IntStream.range(0, 17) 
     .forEach(
      i-> { 
       if(consoleMessages[i] != null) 
        newBoldFont.drawBasicString(consoleMessages[i], 9, 308 - 18 * i, 16777215, 0); 
      }); 

...しかし、なぜ誰もがこれを行うにしたいですか?ループは完璧です、それは可読です、理解できます。コードをそのまま残してください。

+1

ストリームコードは 'filter'オペレーションではるかに良くなります... – Holger

+0

@Holgerはい、しかし、あなたはそのようにインデックスとの関係を失います。それともこのままにするか考えていますか? (インデックス内の検索や、中間の "ペア"オブジェクトを使用する配列の検索とは別に) – mtj

+1

私は 'map'ping、フィルタリング、' .filter(i - > consoleMessages [i]! = null).forEach(i - > newBoldFont.drawBasicString(consoleMessages [i]、9、308 - 18 * i、16777215、0))... – Holger

関連する問題