5

次のように、ArrayList の形式で単語​​のリストが与えられます。

 public ArrayList<String> getListOfStrings(){
     ArrayList<String> list = new ArrayList<String>();
     list.add("This");
     list.add("is");
     list.add("an");
     list.add("exercise");
     list.add("to");
     list.add("illustrate");
     list.add("the");
     list.add("use");        
     list.add("of");
     list.add("ArrayLists");        
     list.add(".");
     return list;
    }

ユーザーが入力した長さ "len" を持つリスト内のすべての単語 (つまり、ArrayList 内のすべてのオブジェクト) を削除するメソッドを作成するにはどうすればよいですか?

ユーザーが入力した長さ「len」のすべての単語をリストするメソッドを既に作成しましたが、次のように機能します。

public ArrayList<String>getWordsWithLength(int len, ArrayList<String> lijst){
    ArrayList<String> list = new ArrayList<String>();
    for(String woord: lijst){
        if(woord.length()==len){
            list.add(woord);
        }
    }
    return(list);

}

しかし、Javaの初心者として、長さ「len」の単語を削除する方法にこだわっています。助けてください!(リストの最後から削除することから始めているという印象を受けます)

4

6 に答える 6

7

リストを現在反復処理している方法では、例外を除いてリストを削除できませんが、反復子は削除できます。

Iterator<String> it = list.iterator();
while(it.hasNext()) {
 if([Condition]) {
   it.remove();
  }
}
于 2013-10-18T14:14:15.803 に答える
4

あなたの方法はすでに除去として機能することができます==.!=

public ArrayList<String> getStringsWithoutEqualLength(int len, ArrayList<String> lijst){
    ArrayList<String> list = new ArrayList<String>();
    for(String woord: lijst){
        if(woord.length() != len){ 
            list.add(woord);
        }
    }
    return(list);
}

から要素を削除しようとしている場合はlijst、返されたリストをそれに再割り当てします。

ArrayList<String> yourList = ...;
yourList = instance.getStringsWithoutEqualLength(someLength, yourList);

長い要素を効果的に削除しIterator . で削除するたびにIterator、バッキング アレイのサイズを変更する必要があります。

于 2013-10-18T14:20:38.993 に答える
1

を防ぐには、Listを使用してから値を削除する必要があります。IteratorConcurrentModificationException

List<String> myList = getListOfStrings();
Iterator<String> it = myList.iterator();
while (it.hasNext()) {
   if(it.next().length() == 3){
    it.remove();
   }
}
于 2013-10-18T14:18:01.043 に答える
0

@SotiriosDelimanolisの答えはおそらくあなたが使用すべきものだと思いますが、Java 8では aStreamと aPredicateを使用してこれを簡単にフィルタリングできることも指摘したいと思います。

 List<String> list2 = list.stream()
                      .filter(s -> s.length() != 3)
                      .collect(Collectors.toList());

完全なテストクラスは次のとおりです。

import java.util.*;
import java.util.stream.*;

class Test {
  public static void main(String args[]) {
     ArrayList<String> list = new ArrayList<String>();
     list.add("This");
     list.add("is");
     list.add("an");
     list.add("exercise");
     list.add("to");
     list.add("illustrate");
     list.add("the");
     list.add("use");
     list.add("of");
     list.add("ArrayLists");
     list.add(".");
     System.out.println(list);
     List<String> list2 = list.stream()
                          .filter(s -> s.length() != 3)
                          .collect(Collectors.toList());
     System.out.println(list2);
  }
}

そして私のテスト出力:

$ java Test
[This, is, an, exercise, to, illustrate, the, use, of, ArrayLists, .]
[This, is, an, exercise, to, illustrate, of, ArrayLists, .]
于 2013-10-18T15:27:03.527 に答える
0

Scalaでは、あなたがするだけです

list.filter(_.length != len)
于 2013-10-18T15:29:36.543 に答える