У меня есть хэш-карта, как это;
key value1
key value2
key value3
key value4
key1 value5
key1 value6
key1 value7
key1 value8
key2 value9
... and so on
Теперь я хочу поместить это в ListView, который содержит четыре строки, и в row1, я хочу:
key value1
key1 value5
key2 value9
key3 value13 and so on till end
И в row2 я хочу:
key value2
key1 value6
key2 value10
key3 value14 and so on till end
И то же самое в строках 3 и 4. Всегда есть только 4 ряда.
У меня проблемы с повторением этого. Вот код, который я написал, но он не работает.
String[] fourrows = hashMap.get("KEY");
for (int i=0;i<fourrows.length;i++) {
HashMap<String, String> listHashMap = new HashMap<>();
listHashMap.put("TA", "ROW VALUE "+fourrows[i]);
for (int j=1;j<hashMap.entrySet().size();j+=4) {
String val = hashMap.values().toArray()[j].toString();
String key = hashMap.get(hashMap.keySet().toArray()[0]).toString();
listHashMap.put("IA", key);
listHashMap.put("XA", val);
incmStmtList.add(listHashMap);
}
}
//Then I pass TA, IA and XA to a simple list adapter and add it to a listView.
incmAdapter = new SimpleAdapter(getContext(), incmStmtList,R.layout.content_results, new String[]{"TA", "IA", "XA"},new int[]{R.id.ta, R.id.ia, R.id.tota});
listView.setVerticalScrollBarEnabled(true);
listView.setAdapter(incmAdapter);
Благодарю.
Из предоставленного вами кода кажется, что исходный hashMap
имеет тип Map<String, String[]>
.
Вы можете перебирать записи на карте, и для каждой записи сохранять четыре значения в разных контейнерах результатов. Поскольку вы указали, что контейнеры результата также должны быть картами:
Map<String, String> one = new HashMap<>();
Map<String, String> two = new HashMap<>();
Map<String, String> three = new HashMap<>();
Map<String, String> four = new HashMap<>();
hashMap.entrySet().forEach(entry -> {
String[] values = entry.getValue();
one.put(entry.getKey(), values[0]);
two.put(entry.getKey(), values[1]);
three.put(entry.getKey(), values[2]);
four.put(entry.getKey(), values[3]);
});
Примечание: при условии, что каждый ключ всегда имеет ровно четыре значения.
Вместо использования HashMap используйте Multimap. А по ключу получаем значение в объекте Collection. затем из каждой коллекции добавьте одно значение во весь список.
Multimap myList = ArrayListMultimap.create();
myList.put("key","value1");
myList.put("key","value2");
myList.put("key","value3");
myList.put("key","value4");
myList.put("key1","value5");
myList.put("key1","value6");
myList.put("key1","value7");
myList.put("key1","value8");
myList.put("key2","value9");
myList.put("key2","value10");
myList.put("key2","value11");
myList.put("key2","value12");
myList.put("key3","value13");
myList.put("key3","value14");
myList.put("key3","value15");
myList.put("key3","value16");
Тогда получите все ключи из списка
Set myKeySet = myList.keySet();
Object[] keys = myKeySet.toArray();
Теперь у вас есть набор всех ключей. затем
HashMap<String, String> listHashMap1 = new HashMap<>();
HashMap<String, String> listHashMap2 = new HashMap<>();
HashMap<String, String> listHashMap3 = new HashMap<>();
HashMap<String, String> listHashMap4 = new HashMap<>();
Теперь добавьте значение в каждый список
for(int i=0;i<4;i++){
List<String> keyval = (List)myList.get((String)keys[i]);
listHashMap1.put((String)keys[i],keyval.get(0));
listHashMap2.put((String)keys[i],keyval.get(1));
listHashMap3.put((String)keys[i],keyval.get(2));
listHashMap4.put((String)keys[i],keyval.get(3));
}
Теперь у вас есть набор из четырех строк. Эта мультикарта использует Google Guava. Таким образом, вам нужно реализовать guava в своем gradle, как показано ниже: реализация 'com.google.guava: guava: 26.0-jre'