Можно ли выразить следующую логику более кратко, используя потоковые конструкции Java 8: - PullRequest
0 голосов
/ 12 сентября 2018

Можно ли более кратко выразить следующую логику, используя потоковые конструкции Java 8:

int[] gameState = {2, 2, 2, 2, 2, 2, 2, 2, 2};                                                                                                    
int[][] winningPositions = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {0, 3, 6},  
     {1, 4, 7}, {2, 5, 8}, {0, 4, 8}, {2, 4, 6}};

for (int[] winningPosition : winningPositions) {                                  

   System.out.println("RST " + gameState[winningPosition[0]] );                  

   if (gameState[winningPosition[0]] == gameState[winningPosition[1]]            
           && gameState[winningPosition[1]] == gameState[winningPosition[2]]     
           && gameState[winningPosition[0]] != 2) {                              

       // Somone has won!                                                        

       gameActive = false;

       String winner = "";                                                       

       if (activePlayer == 1) {                                                  

           winner = "Yellow";                                                    

       } else {                                                                  

           winner = "Red";                                                       

       }                                                                         
   }                      

Я хотел бы изменить этот код на поток.

1 Ответ

0 голосов
/ 12 сентября 2018

Как насчет этого?

Arrays.stream(winningPositions) // Stream<int[][]>
      .anyMatch(win ->  // win is an int[] array
                gameState[win[0]] == gameState[win[1]] && 
                gameState[win[1]] == gameState[win[2]] && 
                gameState[win[0]] != 2
      ); // anyMatch will stop as soon as match has been found. 

Хотя он может не иметь никаких реальных преимуществ по сравнению с вашим первоначальным подходом;

...