質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

21506閲覧

javaの文字列を降順にソートするComparator実装クラスの作成について

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

1クリップ

投稿2015/11/26 06:28

文字列を降順にソートして表示させるプログラムを書きたいですが、
詰んでしまいました。解決策を教えて下さい。

import java.util.Collections;
import java.util.List;
import java.util.ArrayList;

/**
*

  • 文字列を降順にソートして表示させる。

*/
public class Test {
public static void main(String[] args) {
Collections.sort(devicesList);
printList();
}

/** * 文字列リストのソート済の結果を表示する。 */ private void sortedPrint() { List targetList = makeList(); Collections.sort(targetList); printList(targetList); } /** * テストデータ用に文字列リストを作成する。 */ private List<String> makeList() { List<String> devicesList = new ArrayList<String>(); devicesList.add("SmartPhone"); devicesList.add("Tablet"); devicesList.add("MobilePhone"); devicesList.add("Notebook"); return devicesList; } /** * リスト内容を表示する。 */ private static void printList(List<String> itemList) { for (String item : itemList) { System.out.println(item); } }

}

import java.util.Comparator;

/**

  • 文字列降順比較

*/
public class StringComparator implements Comparator<String> {
@override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Collections.reverse()メソッドを使用すれば、Comparatorクラスを実装しなくても実現できます。

java

1import java.util.ArrayList; 2import java.util.Collections; 3import java.util.List; 4 5public class Main { 6 7 public static void main(String[] args) { 8 List<String> devicesList = new ArrayList<String>(); 9 devicesList.add("SmartPhone"); 10 devicesList.add("Tablet"); 11 devicesList.add("MobilePhone"); 12 devicesList.add("Notebook"); 13 14 System.out.println(devicesList); 15 16 Collections.sort(devicesList); 17 System.out.println(devicesList); 18 19 Collections.reverse(devicesList); 20 System.out.println(devicesList); 21 } 22 23}

実行結果

java

1[SmartPhone, Tablet, MobilePhone, Notebook] 2[MobilePhone, Notebook, SmartPhone, Tablet] 3[Tablet, SmartPhone, Notebook, MobilePhone]

http://docs.oracle.com/javase/jp/7/api/java/util/Collections.html#reverse(java.util.List)

対案 : ソートを1回だけ実行する

swordone様のご指摘を受け、ソート処理を1回で済ませるプログラムを以下に示します。
Collections.reverseOrder()メソッドを使用しております。

java

1import java.util.ArrayList; 2import java.util.Collections; 3import java.util.Comparator; 4import java.util.List; 5 6public class Main { 7 8 public static void main(String[] args) { 9 List<String> devicesList = new ArrayList<String>(); 10 devicesList.add("SmartPhone"); 11 devicesList.add("Tablet"); 12 devicesList.add("MobilePhone"); 13 devicesList.add("Notebook"); 14 15 System.out.println(devicesList); 16 17 Comparator<String> reverseOrder = Collections.reverseOrder(); 18 Collections.sort(devicesList, reverseOrder); 19 System.out.println(devicesList); 20 } 21 22}

実行結果

[SmartPhone, Tablet, MobilePhone, Notebook] [Tablet, SmartPhone, Notebook, MobilePhone]

http://docs.oracle.com/javase/jp/7/api/java/util/Collections.html#reverseOrder(java.util.Comparator)

投稿2015/11/26 06:39

編集2015/11/26 07:29
KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2015/11/26 07:14

これでもいいかもしれませんが、一回sort()してからreverse()しないと降順にならないのが難点ですかね。
KiyoshiMotoki

2015/11/26 07:32

swordone様、ご指摘ありがとうございます。 > 一回sort()してからreverse()しないと降順にならないのが難点ですかね。 それが問題になるほどデバイスの数は多くないので、これで良いかなと思ったのですが、、w 回答に、ソートを1回で済ませる対案を提示させていただきました。
swordone

2015/11/26 07:48

難癖つけて申し訳ありません。 しかし、「降順に並べる」という操作をわざわざ「昇順に並べる」「逆順に並べる」という2段階に分けるのは綺麗ではないかなと思い、指摘させていただきました。
KiyoshiMotoki

2015/11/26 07:49

> 難癖つけて申し訳ありません。 とんでもありません! 結果的に、より良い実装方法を見つけることができました。
guest

0

降順に並べるにあたって、あなたのコードには2点問題があります。

  1. Comparatorを使ってソートするなら、Collections.sort()にはリストとComparator実装クラスのオブジェクトを渡す必要がある(今回の場合、StringComparatorのインスタンス)。これがない場合、リストの要素の自然順序付け(Comparable.compareTo())が使われる事になる。
  2. 今書いているComparatorでは自然順序付けと変わらない(つまり昇順のまま)。compareToの対象と引数を逆にする(o2.compareTo(o1))か、マイナスをつける(-o1.compareTo(o2))必要がある。

投稿2015/11/26 07:08

編集2015/11/26 07:13
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問