Java 根据对象的字符串字段对ArrayList中的对象进行排序
伙计们! 我正在为大学做一门功课,我被困在某件事上了。我有一个类的层次结构和一个ArrayList,其中存储了来自这些类的对象。我的代码打印出存储在ArrayList中的对象的详细信息,但我必须根据字符串字段打印出来,我不知道怎么做。我需要根据LibraryItem类中的标题字段打印详细信息,并且指定我需要使用Java类库。我看了一些东西,根据我所看到的,我猜我需要使用Comparable,但我不知道它是如何工作的。。。 以下是部分代码:Java 根据对象的字符串字段对ArrayList中的对象进行排序,java,arraylist,Java,Arraylist,伙计们! 我正在为大学做一门功课,我被困在某件事上了。我有一个类的层次结构和一个ArrayList,其中存储了来自这些类的对象。我的代码打印出存储在ArrayList中的对象的详细信息,但我必须根据字符串字段打印出来,我不知道怎么做。我需要根据LibraryItem类中的标题字段打印详细信息,并且指定我需要使用Java类库。我看了一些东西,根据我所看到的,我猜我需要使用Comparable,但我不知道它是如何工作的。。。 以下是部分代码: public class LibraryItem {
public class LibraryItem {
private String title;
private String itemCode;
private int timesBorrowed;
...
public void printDetails()
{
System.out.println("\nTitle: " + title);
System.out.println("Item code: " + itemCode);
System.out.println("Cost: " + cost);
System.out.println("Times borrowed: " + timesBorrowed);
System.out.println("On loan: " + onLoan);
}
}
公共类库
{
私有arraylistitemlist;
公共图书馆()
{
itemList=新的ArrayList();
}
public void printAllDetails()
{
对于(LibraryItem项:itemList)
{
item.printDetails();
}
}
再次在ArrayList中添加CD和DVD对象。提前感谢!employees.stream().collect(Collectors.summingit(Employee::getSalary))
在这里,employees表示列表。您可以用group by或类似的内容替换SummingIT,Employee是类名,getSalary是需要排序的属性
如需进一步参考,您可以浏览
您可以通过两种方式完成:
public int compare(LibraryItem item1, LibraryItem item2) {//if you are implementing Comparator
return item1.getTitle().compareTo(item2.getTitle());//if you want to sort item by title
}
然后在打印列表之前,您可以按如下方式对它们进行排序:
Collections.sort(itemList, <comparator object>);//if using comparator or you could omit passing comparator object.
//iterate and print items
Collections.sort(itemList,);//如果使用comparator或,则可以省略传递的comparator对象。
//迭代并打印项目
上有一个重载,需要一个,您可以使用它
Collection.sort(items, new Comparator<LibraryItem>{
@Override
public int compare(LibraryItem a, LibraryItem b) {
return a.title.compareTo(b.title);
}
}
溪流方式(原始集合未触及)
收集分类到位(即有副作用)
因此,您希望通过
title
?Collections.sort(Comparator.comparing(LibraryItem::getTitle())对列表进行排序
。由于arrayList在Library类中,我猜我需要在那里对它进行排序。但是当我写下您建议的代码时,我发现两个错误。第一个LibraryItem无法解析为变量,第二个方法getTitle()对于类库是未定义的……我不明白为什么:(LibraryItem
是否有方法getTitle
?@Boris the Spider YesWell,你需要传入实际的列表
我想你也在排序-集合。排序(列表,比较器)
。这是员工工资的总和。这有什么帮助?我只是想帮他做一个示例。作为参考,我引用了url,请在投票前阅读。链接只回答了一个不受欢迎的问题。你的简单示例完全不相关。不要假设我没有仔细阅读你的答案。太详细了-请参阅比较或者,将(…)比作蜘蛛@Boris_above@harshtuna是的,它很棒,但需要java 8。为什么要坚持使用旧版本?只是为了支持java 1.5中难看的企业内容?
public class Library
{
private ArrayList<LibraryItem> itemList;
public Library()
{
itemList = new ArrayList<LibraryItem>();
}
public void printAllDetails()
{
for (LibraryItem item: itemList)
{
item.printDetails();
}
}
public int compare(LibraryItem item1, LibraryItem item2) {//if you are implementing Comparator
return item1.getTitle().compareTo(item2.getTitle());//if you want to sort item by title
}
Collections.sort(itemList, <comparator object>);//if using comparator or you could omit passing comparator object.
//iterate and print items
Collection.sort(items, new Comparator<LibraryItem>{
@Override
public int compare(LibraryItem a, LibraryItem b) {
return a.title.compareTo(b.title);
}
}
Collections.sort(items,(item1,item2) -> item1.title.compareTo(item2.title));
itemList.stream()
.sorted(Comparator.comparing(LibraryItem::getTitle))
.forEachOrdered(LibraryItem::printDetails);
Collections.sort(itemList, Comparator.comparing(LibraryItem::getTitle));
for (LibraryItem item : itemList) {
item.printDetails();
}