如何在java中混洗FilteredList?

use*_*815 4 java javafx java-8 javafx-8

当我想要洗牌时,FilteredList我得到一个java.lang.UnsupportedOperationException.

怎么办呢?

码:

FilteredList<Card> filteredData = 
    new FilteredList(ob, filterByOption(option.get("selectedCard"), option.get("chapter")));

if (option.get("cardOrder") == "shuffle") {
    filterCards=filteredData;
    FXCollections.shuffle(filterCards);
}
Run Code Online (Sandbox Code Playgroud)

DVa*_*rga 5

文档中所述:

使用提供的谓词包装ObservableList并过滤其内容.ObservableList中的所有更改都会立即传播到FilteredList.

因此,您可以ObservableList改为替换基础源:

FXCollections.shuffle(ob);
Run Code Online (Sandbox Code Playgroud)

例:

ObservableList<String> obsList = 
    FXCollections.observableArrayList("Amanda", "Bill", "Adam", "Albus", "Cicero");
FilteredList<String> fList = new FilteredList<>(obsList, s -> s.startsWith("A"));

System.out.println(fList);
FXCollections.shuffle(obsList);
System.out.println(fList);
Run Code Online (Sandbox Code Playgroud)

输出:

[Amanda, Adam, Albus]
[Adam, Albus, Amanda]
Run Code Online (Sandbox Code Playgroud)

  • @ user3235815:您可以通过单击左侧的[空复选标记](http://meta.stackoverflow.com/a/5235/163188)接受答案. (2认同)