Listをソートする方法については多くの情報が見つかりましたが、リストをソートする方法はありません。私はこのようなオブジェクトの束のリストを持っていると「貯蓄」にソートする必要がどのようにソートリスト<Map <String、String >>
"Name": "John",
"Savings": 300
:特に私のようなキー値のマップを持っています。何か案は?
Listをソートする方法については多くの情報が見つかりましたが、リストをソートする方法はありません。私はこのようなオブジェクトの束のリストを持っていると「貯蓄」にソートする必要がどのようにソートリスト<Map <String、String >>
"Name": "John",
"Savings": 300
:特に私のようなキー値のマップを持っています。何か案は?
Comparableインターフェイスについて調べましたか?ソート可能にするには、Comparable()メソッドを持つ新しいクラスの中にMap < String、String>をラップする必要があります。詳細:https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_comparable.htm
public class MapWrapper implements Comparable {
public Map<String,String> record;
public MapWrapper(Map<String,String> record) {
this.record = record;
}
public Integer compareTo(Object compareTo) {
MapWrapper compareToMap = (MapWrapper)compareTo;
if (record.get('Savings') == compareToMap.record.get('Savings')) return 0;
if (record.get('Savings') > compareToMap.record.get('Savings')) return 1;
return -1;
}
}
あなたのリストではなく、地図<文字列、文字列>のMapWrapperオブジェクトが含まれています。あなたがラッパーなしでList<Map<String,String>>
としてあなたの構造を維持する必要がある場合、あなたはまだそれを行うことができ、
List<MapWrapper> myList = new MapWrapper[]{};
myList.add(new MapWrapper(new Map<String,String>{'Name'=>'John','Savings'=>'300'}));
myList.add(new MapWrapper(new Map<String,String>{'Name'=>'David','Savings'=>'100'}));
System.debug(myList); //Unsorted
myList.sort();
System.debug(myList); //Sorted
いますが、ソート自身を、アルゴリズム実装する必要があります:あなたは、その後はlist.sort()を使用して、それを並べ替えることができます。これを行う最も簡単な方法は、バブルソートを使用することです。