小川遊び

~~隠語みたいですね~~

##あそぼう
```stream.java
package stream;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * streamで遊ぼう
 * 
 * @author 小川
 *
 */
public class Stream {

	/** 数値変換可能な文字列のリスト */
	private static final List<String> STRING_LIST = Arrays.asList("0", "2", "2", null, "4", null, "1");

	/** 数値のリスト */
	private static final List<Integer> NUMBER_LIST = Arrays.asList(1, -1, null, 2, null, 2, -4);

	/**
	 * main
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println(convertToStr(NUMBER_LIST));
		System.out.println(convertToInt(STRING_LIST));
		System.out.println(sum(NUMBER_LIST));
		System.out.println(findPuls(NUMBER_LIST));
		System.out.println(findMinus(NUMBER_LIST));
		System.out.println(findEven(NUMBER_LIST));
		System.out.println(findOdd(NUMBER_LIST));
	}

	/**
	 * List{@code <Integer>}をList{@code <String>}に変換
	 * 
	 * @param numList 入力値
	 * @return 変換結果
	 */
	private static List<String> convertToStr(List<Integer> numList) {
		return numList.stream().filter(Objects::nonNull).map(v -> String.valueOf(v))
				.collect(Collectors.toList());
	}

	/**
	 * List{@code <String>}をList{@code <Integer>}に変換
	 * 
	 * @param strList 入力値
	 * @return 変換結果
	 * @throws NumberFormatException 引数に数値変換不能な要素が含まれている場合
	 */
	private static List<Integer> convertToInt(List<String> strList) throws NumberFormatException {
		return strList.stream().filter(Objects::nonNull).map(v -> Integer.parseInt(v))
				.collect(Collectors.toList());
	}

	/**
	 * List{@code <Integer>}内部の数値を足す
	 * 
	 * @param numList 入力値
	 * @return 集計結果
	 */
	private static int sum(List<Integer> numList) {
		return numList.stream().filter(Objects::nonNull).mapToInt(v -> v).sum();
	}

	/**
	 * List{@code <Integer>}を正の整数のみに絞る
	 * 
	 * @param numList 入力値
	 * @return 処理結果
	 */
	private static List<Integer> findPuls(List<Integer> numList) {
		return numList.stream().filter(Objects::nonNull).filter(v -> v >= 0).collect(Collectors.toList());
	}

	/**
	 * List{@code <Integer>}を負の整数のみに絞る
	 * 
	 * @param numList 入力値
	 * @return 処理結果
	 */
	private static List<Integer> findMinus(List<Integer> numList) {
		return numList.stream().filter(Objects::nonNull).filter(v -> v <= 0).collect(Collectors.toList());
	}

	/**
	 * List{@code <Integer>}を偶数のみに絞る
	 * 
	 * @param numList 入力値
	 * @return 処理結果
	 */
	private static List<Integer> findEven(List<Integer> numList) {
		return numList.stream().filter(Objects::nonNull).filter(v -> v % 2 == 0).collect(Collectors.toList());
	}

	/**
	 * List{@code <Integer>}を奇数のみに絞る
	 * 
	 * @param numList 入力値
	 * @return 処理結果
	 */
	private static List<Integer> findOdd(List<Integer> numList) {
		return numList.stream().filter(Objects::nonNull).filter(v -> v % 2 != 0).collect(Collectors.toList());
	}
}

```
##ひとつずつみていこう
`List<Integer>`の要素をnullを排除しつつ`List<String>`に変換

```convertToStr.java
	private static List<String> convertToStr(List<Integer> numList) {
		return numList.stream().filter(Objects::nonNull).map(v -> String.valueOf(v))
				.collect(Collectors.toList());
	}
```
`List<String>`の要素をnullを排除しつつ`List<Integer>`に変換

```convertToInt.java
	private static List<Integer> convertToInt(List<String> strList) throws NumberFormatException {
		return strList.stream().filter(Objects::nonNull).map(v -> Integer.parseInt(v))
				.collect(Collectors.toList());
	}
```
`List<Integer>`内部の数値をnullを排除しつつ集計する

```sum.java
	private static int sum(List<Integer> numList) {
		return numList.stream().filter(Objects::nonNull).mapToInt(v -> v).sum();
	}
```
`List<Integer>`を正の整数のみに絞る

```findPuls.java
	private static List<Integer> findPuls(List<Integer> numList) {
		return numList.stream().filter(Objects::nonNull).filter(v -> v >= 0).collect(Collectors.toList());
	}
```
`List<Integer>`を負の整数のみに絞る

```findMinus.java
	private static List<Integer> findMinus(List<Integer> numList) {
		return numList.stream().filter(Objects::nonNull).filter(v -> v <= 0).collect(Collectors.toList());
	}
```
`List<Integer>`を偶数のみに絞る

```findEven.java
	private static List<Integer> findEven(List<Integer> numList) {
		return numList.stream().filter(Objects::nonNull).filter(v -> v % 2 == 0).collect(Collectors.toList());
	}
```
`List<Integer>`を奇数のみに絞る

```findOdd.java
	private static List<Integer> findOdd(List<Integer> numList) {
		return numList.stream().filter(Objects::nonNull).filter(v -> v % 2 != 0).collect(Collectors.toList());
	}
```
##ListUtils作りたい
つくりたくない？

まぁ単純な操作ばかりだと使うこともなさそう...?

そもそも独自モデルばっかりですかね

基礎的な操作はあらかじめこんな形で用意しておきたいものです




~~てかこのくらいjava側で用意していてほしいような...?~~