ListView 对添加的成员进行排序,就好像它们是原始列表之后的另一个排序列表一样
ListView sorts added members as if they were another sorted list that comes after the original list
在向其中添加新元素后尝试对以某些元素开头的 javafx ListView 对象进行排序时,我遇到了一些奇怪的行为。
用于排序的代码是
movieList.getItems().add(newMovie);
if(mainController.getListingOrder().equals("title"))
{
movieList.getItems().sort(Movie.getTitleComparator());
}
else
{
movieList.getItems().sort(Movie.getYearComparator());
}
getTitleComparator()方法如下
public static Comparator<Movie> getTitleComparator()
{
return new Comparator<Movie>()
{
@Override
public int compare(Movie movie1, Movie movie2)
{
return movie1.getTitle().compareTo(movie2.getTitle());
}
};
}
以下三张图片应该能说明我遇到的问题。
添加任何元素之前:
添加1个元素后:
添加三个元素后:
如您所见,添加的元素彼此按字母顺序排序,但不与列表中已有的元素排序。有没有什么办法可以让所有元素按字母顺序排序,而不是像两个单独的排序数组并排放置一样?
您按区分大小写的顺序比较字符串。
代替a.compareTo(b)
做:
String.CASE_INSENSITIVE_ORDER.compare(a, b)
在向其中添加新元素后尝试对以某些元素开头的 javafx ListView 对象进行排序时,我遇到了一些奇怪的行为。 用于排序的代码是
movieList.getItems().add(newMovie);
if(mainController.getListingOrder().equals("title"))
{
movieList.getItems().sort(Movie.getTitleComparator());
}
else
{
movieList.getItems().sort(Movie.getYearComparator());
}
getTitleComparator()方法如下
public static Comparator<Movie> getTitleComparator()
{
return new Comparator<Movie>()
{
@Override
public int compare(Movie movie1, Movie movie2)
{
return movie1.getTitle().compareTo(movie2.getTitle());
}
};
}
以下三张图片应该能说明我遇到的问题。
添加任何元素之前:
添加1个元素后:
添加三个元素后:
如您所见,添加的元素彼此按字母顺序排序,但不与列表中已有的元素排序。有没有什么办法可以让所有元素按字母顺序排序,而不是像两个单独的排序数组并排放置一样?
您按区分大小写的顺序比较字符串。
代替a.compareTo(b)
做:
String.CASE_INSENSITIVE_ORDER.compare(a, b)