【问题标题】:Sorting Error: Hashmap<String, List<String>>排序错误:Hashmap<String, List<String>>
【发布时间】:2018-01-19 14:40:33
【问题描述】:

我有一个:Hashmap&lt;String,List&lt;String&gt;&gt; 我想按Keys 对其进行排序,当我尝试对其进行排序并单击模拟器关闭应用程序的活动按钮时。我该如何解决? 我的应用程序中的活动现在看起来像这样:

我想将其排序为:01,02,03,04,05 等。

这是我的代码块:

InsidesActivity.class:

public class InsidesActivity extends AppCompatActivity {
    HashMap<String, List<String>> Insides_Categories;
    List<String> List_Items;
    ExpandableListView expandableListView;
    Expandible_List ExpListClass;
    Toolbar tb;
    int lastPosition = -1;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_insides);
        expandableListView = (ExpandableListView) findViewById(R.id.explist);


            Insides_Categories = DataProvider.getInfo();
            List_Items = new ArrayList<String>(Insides_Categories.keySet());

我试过这个块:

//        List<Map.Entry<String,List<String>>> entries = new ArrayList<Map.Entry<String,List<String>>>(Insides_Categories.entrySet());
//        Collections.sort(entries, new Comparator<Map.Entry<String,List<String>>>() {
//            public int compare(Map.Entry<String,List<String>> l1, Map.Entry<String,List<String>> l2) {
//                return l1.getValue().get(0).compareTo(l2.getValue().get(0));
//            }
//        });

            ExpListClass = new Expandible_List(this, Insides_Categories, List_Items);
            expandableListView.setAdapter(ExpListClass);
        }
    }

【问题讨论】:

  • 请添加您的错误日志
  • @AyushKhare IDE 没有抛出错误。当我尝试加入此活动时,刚刚关闭了应用程序。
  • 地图不可排序。
  • @shmosel 那我该怎么办?你对我有什么想法吗?
  • 有什么想法?您所说的只是您想要对地图进行排序,这是不可能的。

标签: java android sorting hashmap


【解决方案1】:

使用LinkedHashMap 来维护您的排序顺序。 HashMap 在插入数据时不会保持顺序。

public static void main(String[] args) {
    Map<String, List<String>> map = new LinkedHashMap<>();
    map.put("b", Arrays.asList("1", "2"));
    map.put("a", Arrays.asList("2", "1"));
    map.put("c", Arrays.asList("2", "1", "6"));
    map.put("d", Arrays.asList("2", "1", "5"));
    Stream<Entry<String, List<String>>> sorted = map.entrySet().stream().sorted(Map.Entry.comparingByKey());
    System.out.println("map:" + map);
    map = sorted.collect(new Supplier<Map<String, List<String>>>() {

        @Override
        public Map<String, List<String>> get() {
            return new LinkedHashMap<>();
        }
    }, new BiConsumer<Map<String, List<String>>, Entry<String, List<String>>>() {

        @Override
        public void accept(Map<String, List<String>> t, Entry<String, List<String>> u) {
            t.put(u.getKey(), u.getValue());
        }
    }, new BiConsumer<Map<String, List<String>>, Map<String, List<String>>>() {
        @Override
        public void accept(Map<String, List<String>> t, Map<String, List<String>> u) {
            // TODO
        }
    });
    System.out.println("map:" + map);
}

【讨论】:

    【解决方案2】:

    当我像这样对列表进行排序时,我解决了我的问题;

    List_Items = new ArrayList<String>(Insides_Categories.keySet());
    Collections.sort(List_Items);
    

    现在看起来像:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-25
      • 2018-03-22
      • 1970-01-01
      • 2017-06-01
      • 2011-12-11
      • 2014-09-15
      相关资源
      最近更新 更多