List内の全ての要素を編集、操作するメソッドの紹介、使い方(JAVA)

# List内の全ての要素を編集、操作するメソッドの紹介、使い方(JAVA)
Listの要素を編集する基本的なメソッドとしてremove(指定したインデックスの要素を削除)やset(指定したインデックスに第二引数の値を代入する)等がありますが、  
今回はList内の全ての要素に大して処理を行うメソッドを紹介したいと思います。
___
1.[List内の特定の値の要素を削除したい場合](#anchor1)  
2.[List内の要素を特定の条件で削除したい場合](#anchor2)   
3.[リスト内の全ての要素を変更したい](#anchor3)   
4.[List内の全ての要素に対して処理を行いたい場合](#anchor4)   
5.[まとめ](#anchor5)     
___
## List内の特定の値の要素を削除したい場合 <a id="anchor1"></a>
・リスト内の値が"x"の要素を全て削除したい  
こういった処理を行いたいときList内の特定の要素の値を削除する方法として、  
`List.remove(インデックス)`  
とIndexOfメソッドを組み合わせる方法がありますが、この方法では同じ値の要素が複数あった場合は一番インデックスが小さいの1つの要素しか削除することができませんでした。  
(もちろん繰り返し文と条件式などを組み合わせて利用すれば削除したい要素を全て削除することは可能ですが)  
こういう場合はremoveAllメソッドを利用する事で簡単に特定の値の全ての要素を削除できます。  
` List.removeAll(Listと同じデータ型の要素が入ったList) `

``` JAVA
public class Main {
	public static void main(String[] args) {
		List<Integer> List = new ArrayList<>(Arrays.asList(1,2,3,4,5,4,3,2,1));
		List<Integer> removeList = new ArrayList<>(Arrays.asList(1,2,3));
		List.removeAll(removeList);
		System.out.println(List);
    }
}

```
実行結果

```
[4, 5, 4]
```
Listの中の要素からremoveListに入っている1,2,3と値が一致した要素が削除されていることが分かります。  
removeメソッドに繰り返し文や条件式を組み合わせて値が1,2,3と一致した要素のみを削除するより楽ですね。  
___
## List内の要素を特定の条件で削除したい場合 <a id="anchor2"></a>
・リスト内の偶数のみ削除したい  
・リスト内の50以上の数字のみ削除したい  
こういったリスト内から要素を特定の条件で削除したい場合はremoveIfメソッドを利用します。  
` removeIf(Predicate<? super E> filter)`  
removeIfメソッドではPredicateインターフェースの実装を引数としており、実装メソッド内の引数としてList内の要素を一つずつ受け取り、戻り値でtrueを返す場合はその要素を削除します。   

``` JAVA
public class Main {
	public static void main(String[] args) {
		List<Integer> List = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,10));
		//偶数の値を削除
		List.removeIf( i -> i % 2 == 0);
		System.out.println(List);
    }
}
```
実行結果

```
[1, 3, 5, 7, 9]
```
偶数の場合（要素を2で割った余りが0の場合）にはtrueを返すため要素を削除している事が分かります。
___
## リスト内の全ての要素を変更したい <a id="anchor3"></a>
・List<String>の全ての要素に文字列を追加したい。  
・List<Integer>の全ての要素の値を二倍にしたい  
こういったリスト内の全ての要素の値を変更したい場合はreplaceAllメソッドを利用します。  
` replaceAll(UnaryOperator<E> operator)`  
replaceAllメソッドではUnaryOperatorインターフェースの実装を引数としており、実装メソッド内の引数としてList内の要素を一つずつ受け取り、戻り値で上書きします。  

``` JAVA
public class Main {
	public static void main(String[] args) {
		List<Integer> List = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,10));
		List.replaceAll(i -> i * 2 );
		System.out.println(List);
    }
}
```
実行結果

```
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
```


___
## List内の全ての要素で処理を行いたい場合 <a id="anchor4"></a>
・リスト内の全ての要素を順番に出力したい  
・リスト外の変数にリスト内全ての要素の値を加算したい  
こういったリスト内の全ての要素を利用した処理を行いたい場合はforEachメソッドを利用します。  
` forEach(Consumer<? super E> action)`  
forEachメソッドではConsumerインターフェースの実装を引数としており、実装メソッド内の引数としてList内の要素を一つずつ受け取ります。  
全ての要素を一つずつ取り出して処理は行いますが、ここまでに紹介したメソッドと違い元のリストの要素が変化する事はありません。  

``` JAVA
public class Main {
	public static void main(String[] args) {
		List<String> List = new ArrayList<>(Arrays.asList("田中","松本","浜田"));
		List.forEach(i -> System.out.println(i + "さん") );
		System.out.println(List);
    }
}
```
実行結果

```
田中さん
松本さん
浜田さん
[田中, 松本, 浜田]
```
実装メソッドでList内の全ての要素を1つずつ引数として受け取り、処理に利用できている事が分かります。  
また、最後にListを出力していますが、Listの内容はforEachメソッド利用前と変化がない事が分かります。
___
## まとめ <a id="anchor5"></a>
* Listから特定の値の要素を全て削除したい場合はremoveAllメソッドを利用する。
* Listから特定の条件を満たす要素を全て削除したい場合はremoveIfメソッドを利用する。
* List内の全ての要素を変更したい場合はreplaceAllメソッドを利用する。
* List内の全ての要素で処理を行いたい場合はforEachメソッドを利用する。