国名を含むList<String>
オブジェクトがあります。このリストをアルファベット順に並べ替えるにはどうすればよいですか。
それらが文字列であると仮定して、便利な静的メソッドを使用してください sort
…
Java.util.Collections.sort(listOfCountryNames)
あなたがそのリストを使わざるを得ない場合、またはあなたのプログラムが次のような構造を持っている場合
それならば、Thilosの回答が最善の方法です。 Tom Hawtin - tackline からのアドバイスと組み合わせると、次のようになります。
Java.util.Collections.sort(listOfCountryNames, Collator.getInstance());
あなたが自由に決めることができ、そしてあなたのアプリケーションがもっと複雑になるかもしれないなら、あなたは代わりにTreeSetを使うようにあなたのコードを変えるかもしれません。この種のコレクションは、エントリが挿入されたときにそのエントリをソートします。 sort()を呼び出す必要はありません。
Collection<String> countryNames =
new TreeSet<String>(Collator.getInstance());
countryNames.add("UK");
countryNames.add("Germany");
countryNames.add("Australia");
// Tada... sorted.
これには、微妙な、しかし重要な利点がいくつかあります。
TreeSet<String> countyNames
を見てすぐに次のことを知っています: これは重複のないソートされた文字列の集まりであり、私はこれが毎回真実であることを確信できます 。短い宣言でそんなに多くの情報。適切なタスクに適切なコレクションを使用することは、短くてバグのないコードを書くための鍵です。このケースではそれほど実演的ではありません、なぜならあなたはただ1行を保存するからです。しかし、私は誰かがListが重複していないことを確認したいときにListを使っているのを見て、それから自分自身でその機能を構築するのをやめました。さらに悪いことに、本当に地図が必要なときに2つのリストを使うことです。
誤解しないでください。Collections.sortを使用してもエラーや問題にはなりません。しかし、TreeSetがはるかにきれいな場合がたくさんあります。
Java 8 StreamまたはGuavaを使用して、新しいソートコピーを作成できます。
// Java 8 version
List<String> sortedNames = names.stream().sorted().collect(Collectors.toList());
// Guava version
List<String> sortedNames = Ordering.natural().sortedCopy(names);
もう1つの選択肢は、Collections APIを介してインプレースソートすることです。
Collections.sort(names);
決して遅刻しないでください。これが私たちができることです(学習目的のためだけに) -
import Java.util.List;
import Java.util.ArrayList;
import Java.util.Collections;
import Java.util.Comparator;
class SoftDrink {
String name;
String color;
int volume;
SoftDrink (String name, String color, int volume) {
this.name = name;
this.color = color;
this.volume = volume;
}
}
public class ListItemComparision {
public static void main (String...arg) {
List<SoftDrink> softDrinkList = new ArrayList<SoftDrink>() ;
softDrinkList .add(new SoftDrink("Faygo", "ColorOne", 4));
softDrinkList .add(new SoftDrink("Fanta", "ColorTwo", 3));
softDrinkList .add(new SoftDrink("Frooti", "ColorThree", 2));
softDrinkList .add(new SoftDrink("Freshie", "ColorFour", 1));
Collections.sort(softDrinkList, new Comparator() {
@Override
public int compare(Object softDrinkOne, Object softDrinkTwo) {
//use instanceof to verify the references are indeed of the type in question
return ((SoftDrink)softDrinkOne).name
.compareTo(((SoftDrink)softDrinkTwo).name);
}
});
for (SoftDrink sd : softDrinkList) {
System.out.println(sd.name + " - " + sd.color + " - " + sd.volume);
}
Collections.sort(softDrinkList, new Comparator() {
@Override
public int compare(Object softDrinkOne, Object softDrinkTwo) {
//comparision for primitive int uses compareTo of the wrapper Integer
return(new Integer(((SoftDrink)softDrinkOne).volume))
.compareTo(((SoftDrink)softDrinkTwo).volume);
}
});
for (SoftDrink sd : softDrinkList) {
System.out.println(sd.volume + " - " + sd.color + " - " + sd.name);
}
}
}
Collections.sort
には2つの引数を使用してください。 Java.text.Collator.getInstance
を通じて取得できるような、大文字と小文字の区別を適切に処理する(つまり、UTF16の順序ではなく、字句を処理する)適切なComparator
が必要になります。
アクセント記号のない英語のみで文字列をソートしているのでなければ、おそらくCollator
を使いたいでしょう。発音区別符号は正しくソートされ、大文字小文字の区別やその他の言語固有のものは無視できます。
Collections.sort(countries, Collator.getInstance(new Locale(languageCode)));
あなたは 照合強度 を設定することができます、Javadocを見てください。
これがスロバキアの例です。
List<String> countries = Arrays.asList("Slovensko", "Švédsko", "Turecko");
Collections.sort(countries);
System.out.println(countries); // outputs [Slovensko, Turecko, Švédsko]
Collections.sort(countries, Collator.getInstance(new Locale("sk")));
System.out.println(countries); // outputs [Slovensko, Švédsko, Turecko]
これがあなたが探しているものです
listOfCountryNames.sort(String::compareToIgnoreCase)
一行で、Java 8を使用して:
list.sort(Comparator.naturalOrder());
Collections.sort()
を使うことで、リストをソートすることができます。
public class EmployeeList {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> empNames= new ArrayList<String>();
empNames.add("sudheer");
empNames.add("kumar");
empNames.add("surendra");
empNames.add("kb");
if(!empNames.isEmpty()){
for(String emp:empNames){
System.out.println(emp);
}
Collections.sort(empNames);
System.out.println(empNames);
}
}
}
出力:
sudheer
kumar
surendra
kb
[kb, kumar, sudheer, surendra]
降順のアルファベット
List<String> list;
...
Collections.sort(list);
Collections.reverse(list);
//Here is sorted List alphabetically with syncronized
package com.mnas.technology.automation.utility;
import Java.util.ArrayList;
import Java.util.Collections;
import Java.util.Comparator;
import Java.util.Iterator;
import Java.util.List;
import org.Apache.log4j.Logger;
/**
*
* @author manoj.kumar
*/
public class SynchronizedArrayList {
static Logger log = Logger.getLogger(SynchronizedArrayList.class.getName());
@SuppressWarnings("unchecked")
public static void main(String[] args) {
List<Employee> synchronizedList = Collections.synchronizedList(new ArrayList<Employee>());
synchronizedList.add(new Employee("Aditya"));
synchronizedList.add(new Employee("Siddharth"));
synchronizedList.add(new Employee("Manoj"));
Collections.sort(synchronizedList, new Comparator() {
public int compare(Object synchronizedListOne, Object synchronizedListTwo) {
//use instanceof to verify the references are indeed of the type in question
return ((Employee)synchronizedListOne).name
.compareTo(((Employee)synchronizedListTwo).name);
}
});
/*for( Employee sd : synchronizedList) {
log.info("Sorted Synchronized Array List..."+sd.name);
}*/
// when iterating over a synchronized list, we need to synchronize access to the synchronized list
synchronized (synchronizedList) {
Iterator<Employee> iterator = synchronizedList.iterator();
while (iterator.hasNext()) {
log.info("Sorted Synchronized Array List Items: " + iterator.next().name);
}
}
}
}
class Employee {
String name;
Employee (String name) {
this.name = name;
}
}
Java 8と同じ: -
//Assecnding order
listOfCountryNames.stream().sorted().forEach((x) -> System.out.println(x));
//Decending order
listOfCountryNames.stream().sorted((o1, o2) -> o2.compareTo(o1)).forEach((x) -> System.out.println(x));