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

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

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

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

2回答

400閲覧

インスタンスの持つ文字列を参照して、インスタンスそのものを並び替えたい。

i_zac8132

総合スコア16

Java

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/08/29 10:52

こんにちは、
趣味でAndroidのプログラミングをしているものです。

一つ皆様のお力を借りたいことがあり、ここに投稿させていただきました。
よろしくお願いいたします。

現在、以下のように適当なフィールドを持ったクラスのインスタンスを複数作成し、並び変えようと試みております。

== ↓ 複数のフィールドを持った独自クラス==

Java

1public class MyClass{ 2 String str1; 3 String str2; 4 int num1; 5 int num2; 6 7 public MyClass(String str1, String str2, int num1, int num2){ 8 this.str1 = str1; 9 () 10 } 11 12//以下GetterやSetterなどは省略 13}

== ↓ 上記クラスのリストを扱う独自クラス==

Java

1public class ListOfMyClass{ 2 List<MyClass> list; 3 4 for(int i=0; i<10; i+=1){ 5 list.add(new MyClass(.../*省略*/...)) 6 } 7 8 //以下省略 9}

このようにしてListMyClassにMyClassの配列(List)を持っています。
これに対し「それぞれのMyClassインスタンスが持つstr1の値を比較し、あいうえお順で並び変える」ということをしたいのですが、方法がわからず困ってしまいました。

Collections.sortを使うと自動でこのようなものを並び変えられるのは知っているのですが、並び替えの基準となるフィールドを選択する方法がわかりませんでした。
そこでCompetetorを用いることで、Collections.sortを独自のルールを持って行えることを知りました。しかし文字列の早さ(あいうえお順)を比較する方法がわかりませんでした。

一次元の文字配列であればArrayクラスを用いることで方法はあるとのことでしたが、それをMyClassのような、複数のフィールドを持つクラスに応用する方法ががわかりませんでした。

やりたいことは「MyClassインスタンスの中身(任意の文字列)を参照し、MyClassインスタンス単位で、Listの順番をソートしたい」です。

どなたかご教授お願い致します。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

手元に Android 環境が無いため、JDK1.7 で動作確認しております。

java

1import java.util.ArrayList; 2import java.util.Collections; 3import java.util.Comparator; 4import java.util.List; 5 6public class ListOfMyClass { 7 8 List<MyClass> list; 9 10 public ListOfMyClass() { 11 list = new ArrayList<MyClass>(); 12 list.add(new MyClass("い", null, 0, 0)); 13 list.add(new MyClass("ろ", null, 0, 0)); 14 list.add(new MyClass("は", null, 0, 0)); 15 list.add(new MyClass("に", null, 0, 0)); 16 list.add(new MyClass("ほ", null, 0, 0)); 17 list.add(new MyClass("へ", null, 0, 0)); 18 list.add(new MyClass("と", null, 0, 0)); 19 list.add(new MyClass("ち", null, 0, 0)); 20 list.add(new MyClass("り", null, 0, 0)); 21 list.add(new MyClass("ぬ", null, 0, 0)); 22 } 23 24 /** 25 * リストの順番を並び替える 26 */ 27 public void sort() { 28 Collections.sort(list, new Comparator<MyClass>() { 29 30 @Override 31 public int compare(MyClass o1, MyClass o2) { 32 return o1.getStr1().compareTo(o2.getStr1()); 33 } 34 35 }); 36 } 37 38 public List<MyClass> getList() { 39 return list; 40 } 41 42 public static void main(String[] args) { 43 ListOfMyClass listOfMyClass = new ListOfMyClass(); 44 45 for (MyClass myClass : listOfMyClass.getList()) { 46 System.out.print(myClass.getStr1()); 47 } 48 System.out.println(); 49 50 listOfMyClass.sort(); 51 52 for (MyClass myClass : listOfMyClass.getList()) { 53 System.out.print(myClass.getStr1()); 54 } 55 System.out.println(); 56 } 57}

java

1public class MyClass { 2 3 String str1; 4 String str2; 5 int num1; 6 int num2; 7 8 public MyClass(String str1, String str2, int num1, int num2) { 9 this.str1 = str1; 10 this.str2 = str2; 11 this.num1 = num1; 12 this.num2 = num2; 13 } 14 15 public String getStr1() { 16 return str1; 17 } 18}

実行結果

いろはにほへとちりぬ いちとにぬはへほりろ
参考

(URLに'()'などを含むと上手くリンクにならないので、手動でアドレスバーにコピペしてください。)
https://developer.android.com/reference/java/util/Collections.html#sort(java.util.List<T>, java.util.Comparator<? super T>)
https://developer.android.com/reference/java/util/Comparator.html#compare(T, T)
https://developer.android.com/reference/java/lang/String.html#compareTo(java.lang.String)

投稿2017/08/29 14:27

KiyoshiMotoki

総合スコア4791

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

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

i_zac8132

2017/08/29 22:54

回答ありがとうございます。 ご丁寧にコードまで記載してくださり、大変勉強になりました。 お陰様で目的の仕様が実現できました。
guest

0

Collections.sortを使う方法で、第一引数にlist、第二引数にComparatorを設定してください。

また、文字順はString#compareToを使用してください。

投稿2017/08/29 12:23

yona

総合スコア18155

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

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

i_zac8132

2017/08/29 22:53

回答ありがとうございます。 compareToのmethodを調べ、Comparatorでの判断基準に使えることを学びました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問