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

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

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

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

Q&A

解決済

2回答

7060閲覧

Javaでリストのとある要素の位置をすべて取得したい

aiueoaiueoaiue

総合スコア94

Java

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

0グッド

0クリップ

投稿2018/11/03 17:34

編集2018/11/03 17:36

###前提・実現したい事
Javaでリストの中のある要素の位置をすべて取得したいのですが、indexOfメソッドを使ってもエラーが出てしまいます。
[0 0, 1 1, 0 0, 2 2, 0 0, 3 3, 0 0, 4 4, 0 0]という整数2つずつを格納したリストがあったとして
(0 0)が格納されている位置をすべて取得したいです。上の例では0,2,4,6,8番と取得されてくれればよいです。
今はindexOfメソッドを使っていますが他に良いメソッドがあればそれでもいいです。解決策が分かる方回答お願いします。
###今のコード

Java

1int test = 0; 2for(int i = 1;i < 9;i++){ 3 test = list.indexOf(new Eex(-1, -1), test); 4 if(test != -1)po.add(test); 5}

###エラー
エラー: indexOfに適切なメソッドが見つかりません(Eex,int)
test = list.indexOf(new Eex(-1, -1), test);
^
メソッド List.indexOf(Object)は使用できません
(実引数リストと仮引数リストの長さが異なります)
メソッド AbstractList.indexOf(Object)は使用できません
(実引数リストと仮引数リストの長さが異なります)
メソッド ArrayList.indexOf(Object)は使用できません
(実引数リストと仮引数リストの長さが異なります)
エラー1個
###補足
関連する質問

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

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

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

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

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

guest

回答2

0

ベストアンサー

おそらくString#indexOfのようなことをしたいのでしょうが、Listの場合、開始インデックスを指定するindexOfが無いためできません。
自力でループして回して、一つずつチェックしましょう。

java

1Eex target = new Eex(0, 0); 2int i = 0; 3for (Eex ex : list) { 4 if(ex.equals(target)) { 5 po.add(i); 6 } 7 i++; 8}

投稿2018/11/03 18:00

編集2018/11/03 18:00
swordone

総合スコア20649

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

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

0

swordone さんの回答にあるように、 for でループさせるのが良いと思います。
あえて indexOf をつかってみたり、 Stream を使ってみた方法も示してみます。

java

1package teratail; 2 3import java.util.ArrayList; 4import java.util.List; 5import java.util.stream.IntStream; 6 7class Eex { 8 public int A; 9 public int B; 10 11 public Eex(int a, int b) { 12 A = a; 13 B = b; 14 } 15 16 public boolean equals(Object obj) { 17 if (this == obj) { 18 return true; 19 } 20 if (obj == null) { 21 return false; 22 } 23 if (!(obj instanceof Eex)) { 24 return false; 25 } 26 Eex other = (Eex) obj; 27 return this.A == other.A && this.B == other.B; 28 } 29 30 public String toString() { 31 return ("[" + A + ", " + B + "]"); 32 } 33} 34 35public class TestTera { 36 public static void main(String[] args) { 37 List<Eex> list = new ArrayList<Eex>(); 38 list.add(new Eex(0, 0)); 39 list.add(new Eex(1, 1)); 40 list.add(new Eex(0, 0)); 41 list.add(new Eex(2, 2)); 42 list.add(new Eex(0, 0)); 43 list.add(new Eex(3, 3)); 44 list.add(new Eex(0, 0)); 45 list.add(new Eex(4, 4)); 46 list.add(new Eex(0, 0)); 47 48 for (Eex e : list) { 49 System.out.print(e); 50 } 51 System.out.println(); 52 53 List<Integer> pos = new ArrayList<Integer>(); 54 int size = list.size(); 55 Eex e00 = new Eex(0, 0); 56 for (int i = 0; i < size;) { 57 List<Eex> sublist = list.subList(i, size); 58 int p = sublist.indexOf(e00); 59 if (p < 0) { 60 break; 61 } 62 pos.add(p + i); 63 i = p + i + 1; 64 } 65 for (Integer i : pos) { 66 System.out.print("" + i + " "); 67 } 68 System.out.println(); 69 70 pos.clear(); 71 for (int i = 0; i < size; i++) { 72 if (list.get(i).equals(e00)) { 73 pos.add(i); 74 } 75 } 76 for (Integer i : pos) { 77 System.out.print("" + i + " "); 78 } 79 System.out.println(); 80 81 int[] indices = IntStream.range(0, list.size()).filter(i -> list.get(i).equals(e00)).toArray(); 82 for (int i : indices) { 83 System.out.print("" + i + " "); 84 } 85 System.out.println(); 86 } 87}

実行例

参考情報

  • Find all the indexes of an item within a list using stream API

https://stackoverflow.com/questions/26179001/

投稿2018/11/03 19:53

katoy

総合スコア22324

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問