Java 排序/筛选ObservableList,它保存重复条目并显示为TreeTableView

Java 排序/筛选ObservableList,它保存重复条目并显示为TreeTableView,java,javafx-8,Java,Javafx 8,我有一个可观察列表,它保存着Auftrag类型的对象。 对象Auftrag的属性NR可能在ObservableList中出现多次(重复),但其他属性内容不同 我尝试使用它来显示根树项下具有相同NR的所有条目 现在,我尝试在TreeTableView中显示数据,其中一组Auftrag对象的第一个NR项字符串应该是根TreeItem,下面具有相同NR的项应该是子TreeItems 问题就在这里。仅显示第一个项目,其中显示所有其他项目。 下面是一些先创建TreeTableView的示例代码 @FXML

我有一个可观察列表,它保存着Auftrag类型的对象。 对象Auftrag的属性NR可能在ObservableList中出现多次(重复),但其他属性内容不同

我尝试使用它来显示根树项下具有相同NR的所有条目

现在,我尝试在TreeTableView中显示数据,其中一组Auftrag对象的第一个NR项字符串应该是根TreeItem,下面具有相同NR的项应该是子TreeItems

问题就在这里。仅显示第一个项目,其中显示所有其他项目。 下面是一些先创建TreeTableView的示例代码

@FXML
private TreeTableView<Auftrag> abTreeTable;
@FXML
私有树视图abTreeTable;
现在创建一个列,设置根并添加列

TreeTableColumn<Auftrag,String> nrTreeCol = new TreeTableColumn<>("NR");
nrTreeCol.setMinWidth(80);
nrTreeCol.setCellValueFactory(
(TreeTableColumn.CellDataFeatures<Auftrag,String> param) ->new ReadOnlyObjectWrapper<String>(param.getValue().getValue().getNR()));
abTreeTable.setRoot(createTreeStructure(u));
abTreeTable.getColumns().add(nrTreeCol);
TreeTableColumn nretreecoll=新的TreeTableColumn(“NR”);
nrTreeCol.设置最小宽度(80);
nrTreeCol.setCellValueFactory(
(TreeTableColumn.CellDataFeatures参数)->新的ReadOnlyObject包装器(param.getValue().getValue().getNR());
setRoot(createTreeStructure(u));
abTreeTable.getColumns().add(nrTreeCol);
这里我创建了这个结构

private TreeItem createTreeStructure(ObservableList<Auftrag> items){
    int itemcount = items.size();
    TreeItem<Auftrag> main = new TreeItem<Auftrag>(items.get(0));
    for (int i =1; i < itemcount; i++) {
        String ab = items.get(i).getNR();
        ObservableList<Auftrag> same = getSameAuftrag(items,ab);
        TreeItem<Auftrag> root = new TreeItem<Auftrag>(items.get(i));
        same.forEach(item->{
            TreeItem<Auftrag> child = new TreeItem<Auftrag>(item);
            root.getChildren().add(child);
        });
        main.getChildren().add(root);
    }

    return main;
私有树Item createTreeStructure(可观察列表项){
int itemcount=items.size();
TreeItem main=newtreeitem(items.get(0));
对于(int i=1;i{
TreeItem子项=新的TreeItem(项目);
root.getChildren().add(child);
});
main.getChildren().add(根目录);
}
回水总管;
在这里,查找相同的NRs已完成,但似乎无法正常工作

private ObservableList<Auftrag> getSameAuftrag(ObservableList<Auftrag> items, String ab){
        ObservableList<Auftrag> same = FXCollections.observableArrayList();
        for (int i = 0; i < items.size(); i++) {
            if (items.get(i).getNR() == ab){
                same.add(items.get(i));
            }
        }

        return same;
    }
private observeList getSameAuftrag(observeList项,字符串ab){
ObservableList same=FXCollections.observableArrayList();
对于(int i=0;i
看起来是这样的

在这里,您可以看到getSameAuftrag函数似乎无法正常工作,因为有五个NR具有相同的字符串,它们应该位于根节点中

我所期望的是一个根行(TreeItem),其标题为NR,若展开它,则应显示具有相同NR的所有子TreeItem


希望有人能帮助我,我不确定我是否完全遵循了你的逻辑,但是你需要使用
.equals(…)
,而不是
=
。例如
如果(items.get(I).getNR().equals(ab))
arrggg应该多睡一会儿:)太多了!