gpt4 book ai didi

java - 我需要对可租借的电影列表进行排序

转载 作者:行者123 更新时间:2023-12-02 00:21:24 25 4
gpt4 key购买 nike

我有我的方法,可以对 dvd 类的数组 (dArray) 中的所有电影进行排序。现在我只需要对可用电影进行排序(setAvailable == true)。该数组由客户从菜单中输入电影动态填充。我的代码当前搜索数组并对所有电影从 A 到 B 进行排序,但现在我希望它仅搜索和排序 d.setAvailable(true) 的电影...感谢您的帮助。非常感谢

这是数组中所有电影的排序列表:

if(e.getSource() == sortMovBtn)
{
if(dArray[0]==null)
{
JOptionPane.showMessageDialog(null,"No movies, please enter\na movie from the main menu","Error",JOptionPane.ERROR_MESSAGE);
}

else
{
BtnPanel.setVisible(false);
imgPnl.setVisible(false);
btnBackDvd.setVisible(true);
txtAreaSortDvd.setVisible(true);
sortDvdPnl.setVisible(true);
Dvd tmp;

for (int i = 0; i < manyDvd; i++)
{
for (int j = 0; j < (manyDvd - 1 - i); j++)
{
if (dArray[j].getTitle().compareTo(dArray[j+1].getTitle()) > 0)
{
tmp = dArray[j];
dArray[j] = dArray[j+1];
dArray[j+1] = tmp;
}
}
}
a = "";
for (int k = 0; k <manyDvd /*dArray.length*/; k++)
a += (dArray[k]);
txtAreaSortDvd.setText(a);
txtAreaSortDvd.setVisible(true);
txtAreaSortDvd.setEditable(false);

//Set font of text area
txtAreaSortDvd.setFont(new Font("Arial", Font.BOLD, 12));

//Initialize JScrollPane
JScrollPane pane1 = new JScrollPane(txtAreaSortDvd);

//Enable user to use wheel on mouse to scroll
pane1.setWheelScrollingEnabled(true);

//Set the scrollbar to always show
pane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

//Add ScrollPane to Panel
sortDvdPnl.add(pane1);

//Add panel to frame
add(sortDvdPnl);

}

}

最佳答案

首先,您的模型(数据)不应与 UI 代码混合使用。

其次,您不应该在 UI 线程上对数据进行排序。在后台工作线程上完成工作。

第三,您不应该自己编写此类代码,尤其不应该那样。你的排序是 O(n^2)。在 java.util.Arrays 中对数组进行排序或在 java.util.Collections 中对集合类进行排序有很好的选择。

有两种基本方法可以对满足特定条件的项目进行排序。您可以使用自定义比较器对整个数据集进行排序,首先根据条件进行匹配,然后根据其余排序条件进行匹配。那么您的结果将位于数据的开头,并且您只会显示结果,直到第一个不符合条件的项目为止。

这样做的优点是,除了存储数据所需的空间外,它不会使用额外的空间。

一种更简洁的方法是仅复制满足条件的数据部分,然后对其进行排序。如果数据位于列表而不是数组中,处理起来也会容易得多,因为您不需要对数据进行两次传递:一次是找出有多少项符合条件,另一次是过滤掉符合条件的项。匹配的项目。 (在两者之间,您将分配一个数组来保存它们。)

假设您的数据位于列表中。您可以获得这样的可用电影:

public List<Movie> getAvailable(List<Movie> movies) {
List<Movie> avail = new ArrayList<Movie>();
for (Movie movie : movies) {
if (movie.isAvailable()) {
avail.add(movie);
}
}
return avail;
}

然后您可以对这些电影进行排序(按自然排序顺序),如下所示:

List<Movie> availOnly = getAvailable(movies);
Collections.sort(availOnly);

附注在 Java 8 中,您将能够执行以下操作:

Iterable<Movie> avail = movies.filter(Movie::isAvailable).sorted();

关于java - 我需要对可租借的电影列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10908995/

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