gpt4 book ai didi

java - TreeMap 未按我的比较器排序

转载 作者:行者123 更新时间:2023-12-01 07:34:01 25 4
gpt4 key购买 nike

我有一排按钮,其中一些可见,有些不可见。因此,我想对这些按钮进行排序,以便将它们添加到面板中,从可见按钮开始。

所以我创建了 LinkedHashMap,如果按钮可见,则添加 true,否则添加 false。然后我创建了比较器,按值( boolean 值)对该 Map 进行排序,只有在它之后,我才将按钮从 TreeMap 添加到面板中。但TreeMap最后是空的。

这就是我所做的:

private Map<Widget, Boolean> panelButtons = new HashMap<Widget, Boolean>();
private Map<Widget, Boolean> panelSortedButtons = new TreeMap<Widget, Boolean>(comparator);
private ButtonsComparator comparator = new ButtonsComparator(panelButtons);

//UI initialization: buttons are added using addToPanel() method - described below

for(Widget widget : panelSortedButtons.keySet()) { //panelSortedButtons is empty
panel.add(widget);
}

//----------------

//All buttons are added via this method
public void addToPanel(Widget widget, boolean isVisible) {
panelButtons.put(widget, isVisible);
}

//----------------

private class ButtonsComparator implements Comparator<Widget>{
Map<Widget, Boolean> buttons;

public ButtonsComparator(Map<Widget, Boolean> buttons) {
this.buttons = buttons;
}

@Override
public int compare(Widget widget1, Widget widget2) {
return buttons.get(widget1).compareTo(buttons.get(widget2));
}
}

如果有的话,错过了什么?

已更新

我明白我的错误,我必须用 HashMap 中的数据填充我的 TreeMap。与 John B. 所展示的方式相同。

panelSortedButtons.putAll(panelButtons);

最佳答案

当你返回 0 时,你就说两个键是相等的。由于 map 不允许重复,因此返回 0 会导致重复项被删除。在您的情况下,您只有两个选项 truefalse,因此您永远不会有两个以上的 key 。

但是,您说该集合是“空”,这表明它不是您的比较器,但您没有向集合添加任何内容。

您想做的是

List<Widget> widgets = new ArrayList<Widget>(panelButtons.keySet());
Collections.sort(widget, comparator);

您可以将具有重复项的元素添加到这样的列表中,然后对它们进行排序,而不会丢失元素,即使它们“相同”

关于java - TreeMap 未按我的比较器排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14650586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com