Play Framework如何在repeat()表单帮助器中对集合进行排序?

时间:2015-04-25 21:46:20

标签: forms scala playframework playframework-2.3

根据plunker,我们说我有以下示例:

public class UserForm {
    public String name;
    public List<MyClass> itmes;
}

@helper.inputText(userForm("name"))

@helper.repeat(userForm("items"), min = 1) { itemField =>

    @helper.inputText(itemField)

}

但是,在MyClass中,我有compareTo()的重写实现。我还有一个getter getSortedItems(),它将以正确的排序顺序返回列表。

目前,使用repeat()帮助 获取我想要的订单中的商品列表。 有没有办法指定repeat()助手的排序?或者我可以给它List作为参数吗?看起来这可以在Scala中完成。

任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用有序集替换List<MyClass>

case class MyClass(id: Int, name: String)
val sorted = new mutable.TreeSet[MyClass]()(new Ordering[MyClass] {
  def compare(a: MyClass, b: MyClass): Int = {
    Ordering.Int.compare(a.id,b.id)
  }
})
sorted.add(MyClass(2,"bob"))
sorted.add(MyClass(1,"bill"))
sorted.add(MyClass(3,"jane"))

我假设该列表仅包含MyClass的唯一实例,因此一个集合应该可以正常工作,每次添加一个项目时,该集合将确保它保持排序。

java版本应该非常接近:

import java.util.Comparator;
import java.util.TreeSet;

public class MyClass {
    public int id;
    public String name;
}

public class MyClassComparator implements Comparator<MyClass> {

    @Override
    public int compare(MyClass a, MyClass b) {
       return Integer.compare(a.id,b.id);
    }
}

TreeSet<MyClass> sorted = new TreeSet<>(new MyClassComparator());