gpt4 book ai didi

java - 度假村ArrayList的HashMaps的一个简单方法

转载 作者:行者123 更新时间:2023-12-02 02:03:53 26 4
gpt4 key购买 nike

我的应用程序包含 HashMap 的 ArrayList。获取的数据按距离排序。为了减少查询,我想求助于ArrayList。我进行了搜索,只找到了建议创建自己的比较器的方法。有更简单的方法吗?那么就像按值而不是按距离重新排列 HashMap 并将它们保存到 HashMap 的第二个 ArrayList 中?

我的代码:

public class MainActivity extends AppCompatActivity {

ArrayList<HashMap<String, String>> contactList;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

contactList = new ArrayList<>();

new GetContacts().execute();
}

private class GetContacts extends AsyncTask<Void, Void, Void> {

@Override
protected void onPreExecute() {
super.onPreExecute();
}

@Override
protected Void doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();

String jsonStr = sh.makeServiceCall(url);

Log.e(TAG, "Response from url: " + jsonStr);

if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);

JSONArray contacts = jsonObj.getJSONArray("stores");

for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);

String id = c.getString("id");
String dist = c.getString("dist");
String value = c.getString("value");

HashMap<String, String> contact = new HashMap<>();

contact.put("id", id);
contact.put("dist", dist);
contact.put("value", value);

contactList.add(contact);
}
}
}
}
}
}

最佳答案

I want to resort the ArrayList. I searched and only found ways which suggest to create an own comparator. Is there a simpler way to do it?

要明确的是,您看到的建议肯定是编写一个 Comparator 以便能够使用 Collections.sort()执行实际排序

仅实现一种比较列表中两个元素的机制比编写整个排序例程(仍然需要知道如何比较元素)要简单得多。您还可以选择使用实现 ComparableHashMap 的自定义子类,但这并不比合适的 Comparator 更容易准备, 并且您需要确保它实际上在将元素添加到列表的任何地方使用。

现在,从头开始编写 Comparator 实现并不难,但现在您可能不必这样做。 Comparator 接口(interface)现在具有一些可用于构建实例的静态方法。因此,为了您的目的,您可能可以做一些简单的事情:

Collections.sort(contactList, Comparator.comparing(m -> Integer.valueOf(m.get("dist"))));

请注意,您确实正在那里构建和使用 Comparator 实例,但您无需编写其类。我认为您不能指望比这更简单的事情。

关于java - 度假村ArrayList的HashMaps的一个简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51141396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com