Java 如何对ArrayList排序<;LinkedHashMap<;字符串,字符串>&燃气轮机;用钥匙?
我正在构建一个配方搜索应用程序,它从一个网站获取配方数据,并将其显示在应用程序的结果页面上(使用JSON)。我查看了网上的教程,发现ArrayList中的HashMap对于这类功能很常见,我使用了LinkedHashMap,因为我对插入顺序感兴趣 信息的结果在配方页面上显示良好。由于我的菜谱页面可以有超过20个菜谱(取决于使用的搜索词),我想给用户一个选项,点击一个按钮就可以访问结果列表 下面是我如何填充arraylist的一个片段Java 如何对ArrayList排序<;LinkedHashMap<;字符串,字符串>&燃气轮机;用钥匙?,java,android,Java,Android,我正在构建一个配方搜索应用程序,它从一个网站获取配方数据,并将其显示在应用程序的结果页面上(使用JSON)。我查看了网上的教程,发现ArrayList中的HashMap对于这类功能很常见,我使用了LinkedHashMap,因为我对插入顺序感兴趣 信息的结果在配方页面上显示良好。由于我的菜谱页面可以有超过20个菜谱(取决于使用的搜索词),我想给用户一个选项,点击一个按钮就可以访问结果列表 下面是我如何填充arraylist的一个片段 static ArrayList<LinkedHash
static ArrayList<LinkedHashMap<String,String>> pairs = new ArrayList<LinkedHashMap<String,String>>();
LinkedHashMap<String, String> map;
for (i=0; i<matches.length(); i++){
map = new LinkedHashMap<String, String>();
map.put("id", id);
map.put("name", name);
map.put("rating", rating);
map.put("source", source);
pairs.add(map);
}
这是我的actionbarOnOptions ItemSelected
方法
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.a_z:
//sort recipe name alphabetically
case R.id.z_a:
//sort recipe name reverse alphabetically
case R.id.by_rating:
//sort rating by highest values
default:
return super.onOptionsItemSelected(item);
}
}
那么,我该如何对这个列表进行排序,比如说按字母顺序排列。正如@LouisWasserman所说,您应该有一个类而不是一个映射。但答案是,您可以使用Collections.sort和自定义比较器。不同的比较器类-每个模式1个。例如,这两个名称可以链接到一个字符串比较器来比较它们的名称 正如@LouisWasserman所说,您应该拥有一个类而不是一个映射。但答案是,您可以使用Collections.sort和自定义比较器。不同的比较器类-每个模式1个。例如,这两个名称可以链接到一个字符串比较器来比较它们的名称 对于这个问题,您可以为您的项目做的更好的解决方案是 只要给学生起一个名字就行了。仅供参考
import java.util.Comparator;
import java.util.Date;
public class Student implements Comparable<Student>{
private int id;
private String name;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public static final Comparator<Student> NameComparator = new Comparator<Student>(){
@Override
public int compare(Student o1, Student o2) {
return o1.name.compareTo(o2.name);
}
};
@Override
public String toString() {
return "Student{" + "id=" + id + ", name=" + name +'}';
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Student other = (Student) obj;
if (this.id != other.id) {
return false;
}
if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 5;
hash = 47 * hash + this.id;
hash = 47 * hash + (this.name != null ? this.name.hashCode() : 0);
return hash;
}
}
注意:==>这可能有助于您进行自定义排序,并且可能更容易实现您自己的自定义类
对于这个问题,您可以为您的项目做的更好的解决方案是
只要给学生起一个名字就行了。仅供参考
import java.util.Comparator;
import java.util.Date;
public class Student implements Comparable<Student>{
private int id;
private String name;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public static final Comparator<Student> NameComparator = new Comparator<Student>(){
@Override
public int compare(Student o1, Student o2) {
return o1.name.compareTo(o2.name);
}
};
@Override
public String toString() {
return "Student{" + "id=" + id + ", name=" + name +'}';
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Student other = (Student) obj;
if (this.id != other.id) {
return false;
}
if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 5;
hash = 47 * hash + this.id;
hash = 47 * hash + (this.name != null ? this.name.hashCode() : 0);
return hash;
}
}
注意:==>这可能有助于您进行自定义排序,并且可能更容易实现您自己的自定义类
为什么要将其存储在
映射
中,而不是包含名称
、id
、评级
和源
字段的类中?这会使一切变得更加困难,效率更低,而且通常是不好的做法。@LouisWasserman我只是用了一些教程来做这件事,所以我不确定正确的方法是什么,为什么要将其存储在映射中,而不是存储在具有名称
,id
,评级
的类中,和源
字段?这会使一切变得更加困难,效率更低,而且通常都是不好的做法。@LouisWasserman我只是用了一些教程来做这件事,所以我不确定正确的方法是什么
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import org.junit.Test;
import static org.junit.Assert.*;
public class StudentSortingTest {
public void testSorting(){
Student s1 = new Student(1, "Saurabh");
Student s2 = new Student(2, "Vikrant");
Student s3 = new Student(3, "Bhushan");
Student s4 = new Student(4, "Neeraj");
Student s5 = new Student(5, "Awasthi");
List<Student> obj_ListStudent = new ArrayList<Student>();
obj_ListStudent .add(s1);
obj_ListStudent .add(s2);
obj_ListStudent .add(s3);
obj_ListStudent .add(s4);
obj_ListStudent .add(s5);
//print List before Sorting.
this.printList(obj_ListStudent);
//perform customized Sorting using Collections Class.
Collections.sort(obj_ListStudent);
//print List After Sorting.
this.printList(obj_ListStudent);
}
public void printList(ArrayList<Student> list){ //Print elements of Student.
for(Student elem : list){
System.out.println(elem+" ");
}
public static void maint(String... args){ //Main Method.
StudentSortingTest obj = new StudentSortingTest();
obj.testSorting();
}
}