Java排序列表

Java排序列表,java,list,Java,List,我有一个java的列表。我从SQL查询中获取值 public void ReloadPages() throws Exception { try (Connection conn = Framework.GetDatabaseManager().GetBone().getConnection()) { try (ResultSet set = conn.createStatement().executeQuery("SELECT * FROM habbo_

我有一个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;
}
public LinkedList getsubpage(int parentId){
LinkedList pages=新建LinkedList();
对于(CatalogPage页面:this.Pages.values()){
if(page.getParentId()!=parentId){
继续;
}
页面。添加(第页);
}
返回页面;
}

我该如何订购这张单子?现在id 4在商店的上方,1在底部,但我希望它按id排序。ORDER by in查询不起作用。

让您的类实现并在方法中提供所述排序排序。要排序,只需使用,但要知道这是一种内联排序。

如果要按相反顺序对列表排序,请尝试以下操作:

Collections.sort(list,Collections.reverseOrder());

列表维护插入顺序。如果您想按ID排序,那么通过实现Comparator接口的compare()方法并将其传递给TreeSet构造函数,使用TreeSet并编写一个外部比较器。值将按ID进行排序和排序。

您可以使用Java版本8中添加的Lambda表达式进行排序

Comparator<ProductColor> byProductColorName = (color1, color2) -> Integer.compare(
    color1.getId(), color2.getId());

myProductColorList.stream().sorted(byProductColorName)
    .forEach(e -> System.out.println(e));
比较器byProductColorName=(color1,color2)->Integer.compare( color1.getId(),color2.getId()); myProductColorList.stream().sorted(按ProductColorName) .forEach(e->System.out.println(e)); 我还发现它非常有用。

与写操作类似,您可以让列表中的元素实现接口。或者,也可以使用允许您按不同键排序的方法。例如,这可以用于处理列表中元素的多个字段的排序,例如,实现一个比较器以按日期排序,实现另一个比较器以按id排序

有关更多信息,请查看接口的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]

我试过使用它,现在它在商店里根本不显示任何东西。
CatalogPage
实现了
Comparable
接口吗?你也可以创建一个新的比较器,而不是实现Comparable。@dkellycollins比较器确实更灵活。对于只能进行精确比较的值,使用单一比较方法很好,但是对于聚合值,您通常需要多种方法来比较它们