11

Javaでリストを取得しました。SQL クエリから値を取得します。

public void ReloadPages() throws Exception {        
    try (Connection conn = Framework.GetDatabaseManager().GetBone().getConnection()) {
        try (ResultSet set = conn.createStatement().executeQuery("SELECT * FROM habbo_shop_pages")) {
            while (set.next()) {
                int Id = set.getInt(1);

                Pages.put(Id, new CatalogPage(set));
            }
        }
    }

    System.out.println("Loaded " + Pages.size() + " Catalog Page(s).");
}

それから私はそれをすべて保存します。別の関数で、parentid から特定のページを取得したいと考えています。

public LinkedList<CatalogPage> getSubPages(int parentId) {
    LinkedList<CatalogPage> pages = new LinkedList<>();

    for (CatalogPage page : this.Pages.values()) {
        if (page.getParentId() != parentId) {
            continue;
        }

        pages.add(page);
    }

    return pages;
}

リストを注文するにはどうすればよいですか? 現在、ID 4 はショップの上にあり、1 は下にありますが、ID で注文したいと考えています。クエリの ORDER BY が機能しません。

4

5 に答える 5

20

Comparableメソッドでソート順をクラスに実装して提供しますcompareTo。ソートするには、単純に を使用しますCollections#sortが、これはインライン ソートであることに注意してください。

于 2013-03-23T11:28:44.060 に答える
14

リストを逆順に並べ替えたい場合は、次のようにします。

Collections.sort(list,Collections.reverseOrder());
于 2013-03-23T11:28:46.637 に答える
6

mre writesと同様に、リスト内の要素にComparableインターフェイスを実装させることができます。別の方法として、異なるキーでソートできるCollections#sort(List, Comparator)メソッドを使用することもできます。これは、たとえば、リスト内の要素の複数のフィールドで並べ替えを処理するために使用できます。たとえば、Comparator を実装して日付で並べ替え、別の Comparator で ID で並べ替えます。

詳細については、Comparatorインターフェイスの javadoc を参照してください。

コード:

package com.stackoverflow.questions;

import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;

public class Question15586200 {

    public static void main(String[] args) {
        // Add test data
        LinkedList<CatalogPage> catalogs = new LinkedList<CatalogPage>();
        catalogs.add(new CatalogPage("foo 4", 4));
        catalogs.add(new CatalogPage("bar 1", 1));
        catalogs.add(new CatalogPage("foobar 2", 2));
        catalogs.add(new CatalogPage("barfoo 3", 3));

        // Sort by id
        Collections.sort(catalogs, new Comparator<CatalogPage>() {

            @Override
            public int compare(CatalogPage o1, CatalogPage o2) {
                return Integer.compare(o1.getId(), o2.getId());
            }
        });

        // Print result
        for (CatalogPage page : catalogs) {
            System.err.println(page);
        }
    }

    public static class CatalogPage {
        private String name;
        private int id;

        public CatalogPage(String name, int id) {
            this.name = name;
            this.id = id;
        }

        public int getId() {
            return id;
        }

        public String getName() {
            return name;
        }

        @Override
        public String toString() {
            return "CatalogPage [name=" + name + ", id=" + id + "]";
        }
    }
}

出力:

CatalogPage [name=bar 1, id=1]
CatalogPage [name=foobar 2, id=2]
CatalogPage [name=barfoo 3, id=3]
CatalogPage [name=foo 4, id=4]
于 2014-08-31T13:41:07.310 に答える
1

リストは挿入順序を維持します。ID で並べ替える場合は、TreeSet を使用し、Comparator インターフェイスの compare() メソッドを実装して外部 Comparator を作成し、それを TreeSet コンストラクターに渡します。値は ID で並べ替えられます。

于 2013-03-23T11:29:39.640 に答える