我有一个问题,我真的不知道从哪里开始。所以我想我会在这里问。
基本上,我有一个带有名字的下拉列表。我希望这些名称按字母顺序排列。
填充下拉列表如下:
我查询数据库并下拉Id和Name,创建一个名为“UserList”的对象,并使用我得到的内容设置名称和id变量。 然后我将此对象添加到ArrayList。我一遍又一遍地这样做。
然后我将此集合转换为数组,并使用
将其传递给我的JSP页面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>
可能有一个简单的答案,但我如何对这些名称进行排序?
答案 0 :(得分:8)
您通常是以public static Collections.sort(List<T> list)
作为参数调用ArrayList
来执行此操作,但要注意实现Comparable
接口,否则它将无效(如果它们是{{1}然后它已经实现了):
Strings
否则,如果您有一个自定义类,但想要对某个字符串字段进行排序,则可以委派Collections.sort(yourList);
方法:
compareTo
最后,如果您的情况没有,只需滚动您自己的public class User implements Comparable<User> {
public int compareTo(User other) {
return userName.compareTo(other.userName);
}
}
方法,如果调用对象较少,则应返回compareTo
,-1
或0
,等于或者大于过去的那个。
答案 1 :(得分:3)
select person.id, person.name from person inner join person_company using(personid)
order by person.name;
并没有尝试在java中进行排序和执行此操作(上面的语法可能不完美,我的MySQL有点生疏)。
答案 2 :(得分:1)
我认为这个问题最理想的解决方案是在数据库查询级别对它们进行排序。如果表格被编入索引,这将是最快且可论证的“最佳”做法。
话虽如此,如果您只想对该列表进行排序而不是在数据库端开始,请使用Collections.sort并让您的UserList实现Comparable<UserList>
小心使用不区分大小写的字符串比较,否则您的用户可能不会理解排序结果。
答案 3 :(得分:1)
我会更改数据库查询以按您希望的顺序返回行。
如果您使用的是SQL,则查询可能如下所示。
SELECT Id, Name FROM Person ORDER BY Name;
这比在代码中执行它有一些优势。
答案 4 :(得分:0)
您可以尝试覆盖UserList的compareTo方法,以便根据某个字符串值按字母顺序比较元素。然后,调用数组列表的排序方法,它应该使用compareTo对它们进行排序。
答案 5 :(得分:0)
您应该使用Collections.sort
和
Comparable
interface UserListComparator
实施Comparator<UserList>
界面有关详细信息,请参阅Comparable
接口文档。
答案 6 :(得分:0)
您可以在数据库中进行排序,而不是使用
触发许多查询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;