Java 如何对ArrayList排序<;LinkedHashMap<;字符串,字符串>&燃气轮机;用钥匙?

Java 如何对ArrayList排序<;LinkedHashMap<;字符串,字符串>&燃气轮机;用钥匙?,java,android,Java,Android,我正在构建一个配方搜索应用程序,它从一个网站获取配方数据,并将其显示在应用程序的结果页面上(使用JSON)。我查看了网上的教程,发现ArrayList中的HashMap对于这类功能很常见,我使用了LinkedHashMap,因为我对插入顺序感兴趣 信息的结果在配方页面上显示良好。由于我的菜谱页面可以有超过20个菜谱(取决于使用的搜索词),我想给用户一个选项,点击一个按钮就可以访问结果列表 下面是我如何填充arraylist的一个片段 static ArrayList<LinkedHash

我正在构建一个配方搜索应用程序,它从一个网站获取配方数据,并将其显示在应用程序的结果页面上(使用JSON)。我查看了网上的教程,发现ArrayList中的HashMap对于这类功能很常见,我使用了LinkedHashMap,因为我对插入顺序感兴趣

信息的结果在配方页面上显示良好。由于我的菜谱页面可以有超过20个菜谱(取决于使用的搜索词),我想给用户一个选项,点击一个按钮就可以访问结果列表

下面是我如何填充arraylist的一个片段

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);
}
这是我的actionbar
OnOptions 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();

     }

}