Javaのようなクラスの一部を形成する文字列のArrayListがある場合:
private ArrayList<String> rssFeedURLs;
上記のArrayListを含むクラスでメソッドを使用し、ArrayList containsを使用してこのArrayListに文字列が含まれているかどうかを確認したい場合、次のようにできるはずです。
if (this.rssFeedURLs.contains(rssFeedURL)) {
RssFeedURLは文字列です。
私は正しいか間違っていますか?
あなたが正しいです。 ArrayList.contains()は、オブジェクトの同一性ではなく、equals()をテストします。
このリストに(o == null?e == null:o.equals(e))などの要素eが少なくとも1つ含まれている場合にのみtrueを返します
NullPointerExceptionが発生した場合は、コンストラクターまたは宣言でリストを初期化したことを確認してください。例えば:
private List<String> rssFeedURLs = new ArrayList<String>();
はい、それは文字列で機能するはずですただし、重複が心配な場合はSet
を使用してください。このコレクションは、何もしなくても重複を防ぎます。 HashSet
は使用しても問題ありませんが、順序付けられていないため、挿入順序を保持する場合はLinkedHashSet
を使用します。
あなたはそれが機能するはずであることは正しいです。おそらく、あなたは何かをインスタンス化するのを忘れました。コードは次のように見えますか?
String rssFeedURL = "http://stackoverflow.com";
this.rssFeedURLS = new ArrayList<String>();
this.rssFeedURLS.add(rssFeedURL);
if(this.rssFeedURLs.contains(rssFeedURL)) {
// this code will execute
}
参考のため、このコードを上記に追加すると、次の条件も実行されることに注意してください。
String copyURL = new String(rssFeedURL);
if(this.rssFeedURLs.contains(copyURL)) {
// code will still execute because contains() checks equals()
}
(rssFeedURL == copyURL)がfalseであっても、rssFeedURL.equals(copyURL)はtrueです。 containsメソッドは、equalsメソッドを処理します。
あなたの質問はあまり明確ではありません。
NULLポインターを取得すると言います。 contains()
によって返される値としてNULLポインターを取得することはできません。
ただし、リストが初期化されていない場合は、NullPointerException
を取得できます。今、あなたの質問を読んで、ここに表示されているものは正しいと言いますが、リストをインスタンス化していないだけかもしれません。
これが機能するには(リストにない場合にフィードURLを追加するには):
if (!this.rssFeedURLs.contains(rssFeedURL)) {
this.rssFeedURLs.add(rssFeedUrl);
}
この宣言は次のことを行います。
private ArrayList<String> rssFeedURLs = new ArrayList<String>();
または、後でメソッドをアクセスする前にリストを初期化します。
rssFeedUrls = new ArrayList<String>();
最後に...本当にList
が必要ですか?重複を避けたいなら、おそらくSet
の方が良いでしょう。順序を維持する場合は、LinkedHashSet
を使用します。
おそらく、例外の原因となったコードを投稿する必要があります。上記がすべてである場合、おそらく実際にアレイを初期化できませんでした。
ここでcontainsを使用しても動作するはずです。
正解です。あなたのコメントによると、他の人が言ったように、おそらくArrayListを初期化していないでしょう。
私のポイントは異なります:重複をチェックしていると主張しているため、containsメソッドを呼び出します。 HashSet
を使用してみてください。何らかの理由でURLの順序を維持する必要がある場合を除き、より効率的なはずです。
迅速に回答してくださった皆様に感謝します。常にセットを使用できましたが、現在ArrayListが機能しています。問題は、ArrayListを含むクラスのコンストラクターで、私が言っていなかったことです:
public RSS_Feed_Miner() {
...
this.rssFeedURLs = new ArrayList<String>();
...
}
どっ!金曜日の午後に。
ArrayList<String> newlyAddedTypes=new ArrayList<String>();
.....
newlyAddedTypes.add("test1");
newlyAddedTypes.add("test1");
newlyAddedTypes.add("test2");
if(newlyAddedTypes.contain("test"){
//called here
}
else{
}
右...文字列で...プリミティブまたは文字列から逸脱した瞬間に物事が変化し、ハッシュコード/等式を実装して必要な効果を得る必要があります。
編集:ArrayList<String>
を初期化してから、アイテムの追加を試みます。
以下のコードでは、arraylistとしてtaskfilledを実行し、taskfilled arraylistに値を追加するメソッドとしてretrieveTaskidForDeleteを指定しています。checkidはstringです。arraylistに文字列値が含まれているかどうかを確認する必要があります。
String checkid;
ArrayList<String> taskfilled=retrieveTaskidForDelete();
if(!taskfilled.contains(checkid)) {
Toast.makeText(getContext(),"Yepiee
Bingo"+ti.get(a),Toast.LENGTH_SHORT).show();
}