簡體   English   中英

將一組自制對象排序到ArrayList(Java)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM