web-dev-qa-db-ja.com

Java-パラメータから既存のリストにList <String>を追加する

パラメータ入力の新しいエントリをリストに追加できるようにしたい。

例えば:

public static void theList (List<String> wholeList) {

    wholeList = new ArrayList<String>();
    wholeList.add("Lettuce");
    wholeList.add("Bacon");
    wholeList.add("Milk");

    wholeList.add(wholeList); <--------- error - addAll doesn't fix it.

上記で「wholeList.add(wholeList)」を試しました。私が意図したのは、追加する必要のある追加の((パラメーターからの)項目、このメソッドを実行するための入力を追加するときの)項目が何であれ、「wholeList」に追加されることです。

ご覧のとおり、レタス、ベーコン、牛乳の3つのアイテムがリストに追加されています。ただし、突然気が変わって、(パラメーターを介して)別のアイテムを追加したい場合は、現在のリスト(wholeList)に追加するだけです。

また、別の質問。

アイテムのリストを1つずつ追加するのではなく(同じリストのインポートを使用して)追加するためのより良い方法はありますか? {「レタス」、「牛乳」、「ベーコン」など}と言いますか?

TY。

5
Dembele

私が理解しているように、addAll()はあなたが必要とするすべてです:

List<String> someList = new ArrayList<String>();
List<String> itemsToAdd = new ArrayList<String>();
itemsToAdd.add("one");
itemsToAdd.add("two");
someList.addAll(itemsToAdd);
// or use handy method which creates temporary list internally:
someList.addAll(Arrays.asList("three", "four"));
6
Ivan Borisov

さて、あなたのコードは非常に悪いことをします。メソッド内でwholeListを初期化し、メソッドが終了すると、メソッドは削除されます(Javaのポインター)。また、リスト自体を追加したので、コードはおそらくあなたがやりたかったものではありません。

おそらく、メソッド内に新しいリストを作成し、パラメーターのリストにすべての項目を追加することを意図していました。その場合、パラメータから取得したリストで「新規」を使用しないでください。


実際、あなたの質問のタイトルを読んだ後-

  1. 既存のリストが必要です。パラメーターにリストの名前を含めることはできません。それをexistingListと呼びましょう。
  2. メソッドでリストを取得した後、すべきではありません「newArralyList」を使用します。これにより、パラメーターからリストが無効になります。

コードは次のようになります。

 public static void theList (List<String> wholeList) {

    wholeList.add("Lettuce");
    wholeList.add("Bacon");
    wholeList.add("Milk");

    existingList.add(wholeList);
4
Issahar Weiss

リストに値を追加する唯一の「よりクリーンな」方法は次のとおりです。

wholelist.addAll(Arrays.asList("Lettuce", "Bacon", "Milk"));

しかし、私はトップの答えがすでにそれを述べているのを見ます。したがって、メソッドの外部でグローバルプライベート変数として配列を作成することで、さらにクリーンアップできます。また、別の回答が言ったように、パラメータリストと同じ名前を共有しない別のリストが必要です。必要なライブラリの例を次に示します。

import Java.util.Arrays;
import Java.util.List;
import Java.util.ArrayList;

public class Example{
   private List<String> globalList = new ArrayList<>();
   private String[] list = {"Bacon", "Lettuce", "Milk"};

   public static void theList (List<String> wholelist) {
      wholelist.addAll(Arrays.asList(list));
      globalList.addAll(wholeList);
   }

両方のリストの名前としてwholeListを使用する場合は、上記のglobalListをwholelistに変更して、次のようにします。

public static void theList (List<String> wholelist) {
   this.wholelist.AddAll(wholelist);
   this.wholelist.addAll(Arrays.asList(list));
}

しかし、私はそれを避けたいと思います。

0
Cody Ferguson