如何排序ArrayList <linkedhashmap <string,string>&gt;按钥匙?

时间:2016-02-27 02:00:41

标签: java android

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

信息结果在食谱页面上显示正常。由于我的食谱页面可以有超过20个食谱(取决于所使用的搜索术语),我想让用户选择通过单击按钮来求助结果列表。

enter image description here

以下是我如何填充我的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);
}

以下是我的arraylist(打印出来)

的示例
{id=1518539, name=Slow Cooker Mac and Cheese, rating=4, source=Merlot Mommy}
{id=1522143, name=Crock Pot Chicken Stroganoff, rating=4, source=Diethood}
{id=1506448, name=Slow Cooker Lemon-Garlic Chicken, rating=4, source=Magic Skillet}
{id=1520809, name=Chicken Tortilla Soup, rating=4, source=How does your garden grow}

这是我的操作栏onOptionsItemSelected方法

@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);
        }

    }

那么,我该如何对这个列表进行排序呢,让我们按字母顺序说一下。

2 个答案:

答案 0 :(得分:0)

正如@LouisWasserman所说,你应该有一个课而不是地图。但答案是你可以使用Collections.sort,使用自定义Comparator。不同的比较器类 - 每种模式1。例如,两个名称可以链接到比较其名称的字符串比较器。

答案 1 :(得分:0)

  

您可以为项目做的更好的解决方案是。

只需创建一个班级名称Student。仅供参考。

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;
    }

}

现在,我正在编写一个Student Class来展示自定义 排序的效果。结果将显示:==&gt;

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();

     }

}
  

注意:==&gt;这可能有助于您进行自定义排序,并且可以更轻松地实施您自己的自定义 Class