2013-06-03 4 views
6

Ho una lista che sto tornando alla vista.Playframework: looping su un elenco

public static Result index() { 

     List<String> list = new ArrayList<String>(); 
     list.add("idea 1"); 
     list.add("idea 2"); 
     list.add("idea 3"); 
     list.add("idea 4"); 
     list.add("idea 5"); 
     list.add("idea 6"); 
     list.add("idea 7"); 

     return ok(index.render(list)); 
} 

mi piacerebbe scorrere su di esso 3 alla volta in modo che venga visualizzato in questo modo:

<ul> 
    <li>idea 1</li> 
    <li>idea 2</li> 
    <li>idea 3</li> 
</ul> 
<ul> 
    <li>idea 4</li> 
    <li>idea 5</li> 
    <li>idea 6</li> 
</ul> 
<ul> 
    <li>idea 7</li> 
</ul> 

Sono in grado di capire come fare questo utilizzando il ciclo for.

Ho il codice Java per questo, solo in grado di tradurre questo al codice Giocare template framework:

 int size = list.size(); 
     int loopSize = (int) Math.ceil(size/3.0); 
     int counter = 0; 

     for(int j = 0 ; j < loopSize; j++) { 

      System.out.println("---------------------");    

      for (int i = 0; i < 3; i++) { 
       if(counter < size) { 
        System.out.println(list.get(counter)); 
        counter++; 
       } else { 
        break; 
       } 
      } 

      System.out.println("---------------------"); 
     } 

risposta

10

questo dovrebbe funzionare:

@(list: List[String]) 

@for(index <- 0 until list.size){ 
    @if(index % 3 == 0){ 
     <ul> 
    } 

    <li>@list(index)</li> 

    @if(index % 3 == 2 || index == (list.size - 1)){ 
     </ul> 
    } 
} 
8

Ecco una versione più Scala-esque:

@(list: List[String]) 

@list.grouped(3).map { group => 
    <ul> 
    @group.map { item => 
    <li>@item</li> 
    } 
    </ul> 
} 

(L'altra risposta risponde alla domanda come più direttamente, in particolare come la questione r potrebbe non usare Scala nel resto del suo progetto).

+0

lei ha ragione. Sto usando Java e la risposta di @Aerus sembra più naturale provenire da uno sfondo Java. –

1

Ecco un esempio di lavoro,

@(list: List[String]) 

@for(value <- list){ 

}