リストは
List<String> list = new ArrayList<String>();
list.add("apple");
list.add("ball");
list.add("apple");
list.add("cat");
list.add("ball");
次に、このリストをリンゴ、ボール、猫の頻度でソートする必要があります
次のように出力する必要があります。
apple
ball
cat
リストは
List<String> list = new ArrayList<String>();
list.add("apple");
list.add("ball");
list.add("apple");
list.add("cat");
list.add("ball");
次に、このリストをリンゴ、ボール、猫の頻度でソートする必要があります
次のように出力する必要があります。
apple
ball
cat
まず、文字列の出現をカウントしてから、マップを使用して並べ替えます
List<String> list = new ArrayList<String>();
list.add("apple");
list.add("ball");
list.add("apple");
list.add("cat");
list.add("ball");
Map<String, Integer> map = new HashMap<String, Integer>();
for (String s : list) {
if (map.containsKey(s)) {
map.put(s, map.get(s) + 1);
} else {
map.put(s, 1);
}
}
ValueComparator<String, Integer> comparator = new ValueComparator<String, Integer> (map);
Map<String, Integer> sortedMap = new TreeMap<String, Integer> (comparator);
sortedMap.putAll(map);
List<String> sortedList = new ArrayList<String> (sortedMap.keySet());
System.out.println(sortedMap);
System.out.println(sortedList);
}
static class ValueComparator<K, V extends Comparable<V>> implements Comparator<K> {
Map<K, V> map;
public ValueComparator(Map<K, V> base) {
this.map = base;
}
@Override
public int compare(K o1, K o2) {
return map.get(o2).compareTo(map.get(o1));
}
}
リスト内の要素の頻度を登録するマップを含むカスタマイズされたリストを作成できます。
pulic class FrequencySortList<E> extend ArrayList<E> {
private Map<E,Integer> frequency = new HashMap<E,Integer>();
.....
}
まず、モデルとして単純なクラスを作成する必要があります。
public class Thing {
String name;
int total;
public Thing(String name){
this.name=name;
total=1;
}
//setter and getter
}
次に、そのことの頻度を計算する必要があります。
List list = new ArrayList();
list.add("apple");
list.add("ball");
list.add("apple");
list.add("cat");
list.add("ball");
System.out.println(list.size());
List list2 = new ArrayList();
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
Thing thing= new Thing(list.get(i).toString());
if(list2.size()<1){
list2.add(thing);
}else {
boolean insert=true;
int x=0;
for(int j=0;j<list2.size();j++){
Thing toCompare=(Thing)list2.get(j);
if(toCompare.getName().equals(thing.getName())){
insert=false;
x=j;
thing.setTotal(thing.getTotal()+1);
break;
}
}
if(insert==true){
list2.add(thing);
}else{
list2.set(x, thing);
}
}
}
for(int i=0;i<list2.size();i++){
Thing thing=(Thing)list2.get(i);
System.out.println(thing.getName()+" : "+thing.getTotal());
}
これを試して、
List list = new ArrayList();
list.add("apple");
list.add("ball");
list.add("apple");
list.add("cat");
list.add("ball");
// sort the list
Collections.sort(list);
ここにあなたのリストが含まれています:
apple
apple
ball
ball
cat
List list2 = new ArrayList();
for(int i=0;i<list.size();i++)
{
if(!list2.contains(list.get(i)))
{
list2.add(list.get(i));
}
}
for(int i=0;i<list2.size();i++)
{
System.out.println(list2.get(i));
}
list2 は以下を出力します:
apple
ball
cat
または、コメントで言及されているjahroyとして、この1行を使用して同じことを行うことができます
List list2 = new ArrayList<String>(new TreeSet<String>(list));