[英]Sorting a Set of selfmade objects to an ArrayList (Java)
因此,我必須對“ Article”類中的項的Set(最好是TreeSet)進行排序:
public abstract class Article {
String title;
String articleNumber;
public Article(String title, String articleNumber) {
this.title = title;
this.articleNumber = articleNumber;
}
public String getArticleNumber() {
return this.articleNumber;
}
}
public class Book extends Article {
String author;
public Book(String author, String title, String articleNumber) {
super(title, articleNumber);
this.author = author;
}
}
public class Song extends Article {
String interpret;
public Song(String interpret, String title, String articleNumber) {
super(title, articleNumber);
this.interpret = interpret;
}
}
Article是OnlineShop的嵌套類,其中包含原始的Set of Articles。 我已經實現了添加和刪除關節的方法,但是我仍然需要一種對集合中的文章進行排序的方法: Set<Article> availableArticles = new TreeSet<Article>();
根據ArrayList中的articleNumber值。 我已經嘗試過了,但是似乎不起作用:文章列表未排序的地方,但是字符串值不是(我如何提取這個?)
Collections.sort(unSorted, new Comparator<Article>() {
@Override
public int compare(Article a, Article b) {
return a.getArticleNumber().compareTo(b.getArticleNumber());
}
});
}
我認為您的無誤沒有錯。 我認為您的文章編號的格式為“ 1234”。 雖然它是一個String對象,但是如果想要比較它的編號來對其排序,則必須將Strings解析為一個int。 否則,比較器會將您的數字解釋為基於字節的字符(這會造成混亂)。
如果我的假設是正確的,則未經測試的解決方案如下所示:
Collections.sort(unSorted, new Comparator<Article>() {
@Override
public int compare(Article a, Article b) {
return Integer.compare(Integer.parseInt(a.getArticleNumber()),Integer.parseInt(b.getArticleNumber()));
}
我認為這看起來像一團糟...更好地做到這一點:
Collections.sort(unSorted, new Comparator<Article>() {
@Override
public int compare(Article a, Article b) {
int articleNumberOne = Integer.parseInt(a.getArticleNumber());
int articleNumberTwo = Integer.parseInt(b.getArticleNumber());
return Integer.compare(articleNumberOne, articleNumberTwo);
}
}
感謝霍爾格的建議:D
謝謝大家的投入,我用這種方法實現了我想要的:
public ArrayList<Article> sortByArticleNumber() {
if (availableArticles.isEmpty()) {
System.out.println("No Articles available");
return new ArrayList<Article>();
}
ArrayList<Article> articles= new ArrayList<Article>(availableArticles);
// sort Methode wird überschrieben für ArrayList<Article> articles
Collections.sort(articles, new Comparator<Article>() {
@Override
public int compare(Article a, Article b) {
int a1 = Integer.parseInt(a.getArticleNumber());
int b1 = Integer.parseInt(b.getArticleNumber());
return Integer.compare(a1, b1);
}
});
System.out.println(articles.toString());
return articles;
}
public static void main(String args[]) {
try {
OnlineShop myShop = new OnlineShop();
//Set<Article> availableArticles = new TreeSet<Article>();
//availableArticles.add(myShop.new Article ("Dell", "1234567"){});
//availableArticles.add(myShop.new Article ("Alienware", "987654"){});
myShop.addArticle(myShop.new Article ("Dell", "9999"){});
myShop.addArticle(myShop.new Article ("Asio", "9888"){});
myShop.addArticle(myShop.new Article ("Alienware", "9001"){});
myShop.addArticle(myShop.new Song ("SSIO", "Bonn17", "5346"));
myShop.sortByArticleNumber();
}
catch (Throwable ex) {
System.err.println("Uncaught exception - " + ex.getMessage());
ex.printStackTrace(System.err);
}
}
結果是:
[Song [interpret=SSIO, title=Bonn17, articleNumber=5346]
, Article [title=Alienware, articleNumber=9001]
, Article [title=Asio, articleNumber=9888]
, Article [title=Dell, articleNumber=9999]
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.