有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

jsp以字母顺序获取java对象集合

我有一个问题,我真的不知道从哪里开始。所以我想在这里问一下

基本上,我有一个下拉列表,里面有名字。我希望这些名字按字母顺序排列

填充下拉列表的操作如下所示

我查询一个数据库,下拉一个Id和名称,创建一个名为“UserList”的对象,并用我得到的信息设置名称和Id变量。 然后将此对象添加到ArrayList。我一遍又一遍地这样做

然后,我将这个集合转换为一个数组,并使用

session.setAttribute("userList", UserList);

然后,我填充下拉列表,如下所示

<c:forEach items="${userList}" var="c" >
`<html-el:option value="${c.id}"><c:out value="${c.name}"/></html-el:option> </c:forEach>

可能有一个简单的答案,但如何对这些名称进行排序


共 (6) 个答案

  1. # 1 楼答案

    通常使用ArrayList作为参数调用public static Collections.sort(List<T> list),但要注意实现Comparable接口,否则它将不起作用(如果它们是Strings,那么它已经实现了):

    Collections.sort(yourList);
    

    否则,如果您有一个自定义类,但希望仅在其中的某个字符串字段上排序,则可以委托compareTo方法:

    public class User implements Comparable<User> {
       public int compareTo(User other) {
          return userName.compareTo(other.userName);
       }
    }
    

    最后,如果没有一个是您的情况,只需滚动您自己的compareTo方法,它应该返回-101,如果调用对象的值小于、等于或大于传递的值

  2. # 2 楼答案

    我将更改数据库查询以按您希望的顺序返回行

    如果您使用的是SQL,则查询可能如下所示

    SELECT Id, Name FROM Person ORDER BY Name;
    

    这比在代码中进行有一些优势

    • 它更快
    • 您不必更改代码
    • 这是更少的工作
  3. # 3 楼答案

    您可以尝试覆盖UserList的compareTo方法,以便它根据某个字符串值按字母顺序比较元素。然后,调用数组列表的sort方法,它应该使用compareTo对它们进行排序,以覆盖它们

  4. # 4 楼答案

    您可以在数据库中进行排序,而不是使用

    select Id, Name from Person where id = '+variable+';
    

    您可以循环变量并创建一个逗号分隔的列表,这样您只需启动一个查询

    int[] variableList = wherever_you_get_it_from;
    StringBuffer csv = new StringBuffer();
    for (int i = 0; i < variableList.length; i++) {
       csv.append(variableList[i]);
       if (i < variableList.length - 1)
          csv.append(",");
    }
    

    然后给

    select Id, Name from Person where id in ( +csv.toString()+) order by Name;
    

    由于您是从公司表中获取用户ID,因此可以加入并获取

    select u.usrid, u.name from company c left join user u on c.usrid = u.usrid
       where c.companyid in (comapnyid1, companyid2, companyid3) order by u.name;
    
  5. # 5 楼答案

    Michael,您应该使用join和order by从数据库中获取这些数据,而不是使用Java进行检索和排序:

     select person.id, person.name from person inner join person_company using(personid)
     order by person.name;
    

    并且没有尝试用java进行排序和操作(上面的语法可能并不完美,我的MySQL有点生疏)

  6. # 6 楼答案

    我认为解决这个问题最理想的方法是在数据库查询级别对它们进行排序。如果该表索引良好,这将是最快且有争议的“最佳”实践

    这就是说,如果您只想对列表进行排序,而不想开始在数据库端捣乱,请使用集合。排序并让您的用户列表实现Comparable<UserList>

    小心使用不区分大小写的字符串比较,否则用户可能不会欣赏排序结果