Làm cách nào để sắp xếp LinkedHashMap dựa trên các giá trị của nó khi LinkedHashMap chứa String và Integer. Vì vậy, tôi cần phải sắp xếp nó dựa trên các giá trị là số nguyên. Cảm ơn rất nhiềuSắp xếp LinkedHashMap
Trả lời
này bây giờ là khá một chút dễ dàng hơn với Java 8 dòng: bạn không cần bản đồ trung gian để sắp xếp:
map.entrySet().stream()
.sorted(Map.Entry.comparingByValue())
.forEach(entry -> ...);
LinkedHashMap
chỉ duy trì thứ tự chèn. Nếu bạn muốn sắp xếp dựa trên giá trị, bạn có thể cần phải tự viết comparator
của riêng mình.
Brilliant, Có, Cảm ơn rất nhiều, tôi đã viết so sánh của riêng tôi – Ramin
Tôi không nghĩ rằng bạn cần phải viết so sánh của riêng bạn. 'Map.Entry.comparingByValue()' sẽ tạo một cái cho bạn. Và nó có thể được đảo ngược bởi 'Collections.reverseOrder (Map.Entry.comparingByValue())'. – sprinter
@sprinter: Nếu giá trị là loại của bất kỳ đối tượng tùy chỉnh nào? – kosa
List<Map.Entry<String, Integer>> entries =
new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
Collections.sort(entries, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> a, Map.Entry<String, Integer> b){
return a.getValue().compareTo(b.getValue());
}
});
Map<String, Integer> sortedMap = new LinkedHashMap<String, Integer>();
for (Map.Entry<String, Integer> entry : entries) {
sortedMap.put(entry.getKey(), entry.getValue());
}
Thôi được, tôi đã viết đúng mã đó! :) Ngoại trừ phần cuối cùng, tôi không nghĩ rằng OP thực sự cần phải có chúng trở lại trong một bản đồ. –
cảm ơn rất nhiều. đoạn mã rất hữu ích – Ramin
Câu trả lời hay. Tôi đã phải sắp xếp theo thứ tự giảm dần như vậy, thêm một dấu hiệu -ve trong khi trả về giá trị từ Comparator. –
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.NavigableMap;
import java.util.SortedMap;
import java.util.TreeMap;
public class HashMapTest {
public static void main(String[] args) {
Map<String, Integer> map=new LinkedHashMap<String, Integer>();
map.put("a", 11);
map.put("B", 12);
map.put("c", 3);
map.put("d", 4);
map.put("e", 5);
map.put("f", 6);
map.put("g", 7);
map.put("h", 8);
map.put("i", 9);
map.put("j", 3);
map.put("k", 2);
map.put("l", 1);
List<Map.Entry<String, Integer>> entries = new
ArrayList<Map.Entry<String, Integer>>(map.entrySet());
Collections.sort(entries,new CustomizedHashMap());
Map<String, Integer> sortedMap = new LinkedHashMap<String,
Integer>();
for (Map.Entry<String, Integer> entry : entries) {
sortedMap.put(entry.getKey(), entry.getValue());
System.out.print(sortedMap.put(entry.getKey(),
entry.getValue())+" ");
}
}
}
class CustomizedHashMap implements Comparator<Map.Entry<String, Integer>> {
@Override
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
// TODO Auto-generated method stub
return -o1.getValue().compareTo(o2.getValue());
}
}
Bạn phải sử dụng một LinkedHashMap? TreeMap có thể giúp bạn? – RNJ
điều này có thể giúp http://stackoverflow.com/questions/780541/how-to-sort-hash-map – RNJ
Ồ. Tôi hiểu rồi. Không bận tâm để đọc các ý kiến.^_^ – DankMemes