はじめに
Javaの実装で利用したStream操作をまとめてみました。
特定のデータのみ抽出したい
NULLデータを取り除く(List版)
リストからNULLデータを取り除く方法です。
package com.app;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
System.out.println("---NULLあり---");
List<Integer> isNullList = Arrays.asList(1, 2, null, 3);
isNullList.forEach(System.out::println);
System.out.println("---NULLなし---");
List<Integer> nonNullList = isNullList.stream()
.filter(Objects::nonNull)
.collect(Collectors.toList());
nonNullList.forEach(System.out::println);
}
}
実行結果
---NULLあり---
1
2
null
3
---NULLなし---
1
2
3
NULLデータを取り除く(配列版)
配列からNULLデータを取り除く方法です。
package com.app;
import java.util.Arrays;
import java.util.Objects;
public class Main {
public static void main(String[] args) {
System.out.println("---NULLあり---");
Integer[] isNullArray = { 1, 2, null, 3 };
Arrays.stream(isNullArray).forEach(System.out::println);
System.out.println("---NULLなし---");
Integer[] nonNullArray = Arrays.stream(isNullArray)
.filter(Objects::nonNull)
.toArray(Integer[]::new);
Arrays.stream(nonNullArray).forEach(System.out::println);
}
}
実行結果
---NULLあり---
1
2
null
3
---NULLなし---
1
2
3
NULLデータを取り除く(Map版)
リストからMapデータを取り除く方法です。
package com.app;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
System.out.println("---NULLあり---");
Map<String, Integer> isNullMap = new HashMap<String, Integer>(){
{
put("key1",1);
put("key2",2);
put("keyNull",null);
put("key3",3);
}
};
isNullMap.entrySet().stream().forEach(System.out::println);
System.out.println("---NULLなし---");
Map<String, Integer> nonNullMap = isNullMap.entrySet().stream()
.filter(e-> Objects.nonNull(e.getValue()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
nonNullMap.entrySet().stream().forEach(System.out::println);
}
}
実行結果
---NULLあり---
key1=1
key2=2
keyNull=null
key3=3
---NULLなし---
key1=1
key2=2
key3=3
データ変換
Listを配列に変換する
Listを配列に変換する方法です。
package com.app;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("apple", "banana", "cherry");
System.out.println("---Listデータ---");
list.forEach(System.out::println);
System.out.println("---配列データ---");
String[] array = list.stream().toArray(String[]::new);
Arrays.stream(array).forEach(System.out::println);
}
}
実行結果
---リストデータ---
apple
banana
cherry
---配列データ---
apple
banana
cherry
ListをMapに変換する(KeyはListのインデックス)
リストをMapに変換する方法です。Mapのキーはリストのインデックスを指定します。
package com.app;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
System.out.println("---リストデータ---");
List<String> list = Arrays.asList("apple", "banana", "cherry");
list.forEach(System.out::println);
System.out.println("---Mapデータ---");
Map<Integer, String> map = IntStream.range(0, list.size())
.boxed()
.collect(Collectors.toMap(i -> i, list::get));
map.entrySet().stream().forEach(System.out::println);
}
}
実行結果
---リストデータ---
apple
banana
cherry
---Mapデータ---
0=apple
1=banana
2=cherry
配列をListに変換する
配列をListに変換する方法です。
package com.app;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
System.out.println("---配列データ---");
String[] array = { "apple", "banana", "cherry" };
Arrays.stream(array).forEach(System.out::println);
System.out.println("---リストデータ---");
List<String> list = Arrays.stream(array).collect(Collectors.toList());
list.forEach(System.out::println);
}
}
実行結果
---配列データ---
apple
banana
cherry
---リストデータ---
apple
banana
cherry
配列をMapに変換する(Keyは配列のインデックス)
配列をMapに変換する方法です。Mapのキーは配列のインデックスを指定します。
package com.app;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
System.out.println("---配列データ---");
String[] array = { "apple", "banana", "cherry" };
Arrays.stream(array).forEach(System.out::println);
System.out.println("---Mapデータ---");
Map<Integer, String> map = IntStream.range(0, array.length)
.boxed()
.collect(Collectors.toMap(i -> i, i -> array[i]));
map.entrySet().stream().forEach(System.out::println);
}
}
実行結果
---配列データ---
apple
banana
cherry
---Mapデータ---
0=apple
1=banana
2=cherry
MapをListに変換する(Mapのキーのみリストにする)
MapのKeyをListに変換する方法です。
package com.app;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
System.out.println("---Mapデータ---");
Map<Integer, String> map = new HashMap<Integer, String>() {
{
put(1, "apple");
put(2, "banana");
put(3, "cherry");
}
};
map.entrySet().stream().forEach(System.out::println);
System.out.println("---Listデータ---");
List<Integer> keyList = map.keySet().stream().collect(Collectors.toList());
keyList.forEach(System.out::println);
}
}
実行結果
---Mapデータ---
1=apple
2=banana
3=cherry
---Listデータ---
1
2
3
MapをListに変換する(MapのValueのみListにする)
MapのValueをListに変換する方法です。
package com.app;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
System.out.println("---Mapデータ---");
Map<Integer, String> map = new HashMap<Integer, String>() {
{
put(1, "apple");
put(2, "banana");
put(3, "cherry");
}
};
map.entrySet().stream().forEach(System.out::println);
System.out.println("---Listデータ---");
List<String> valueList = map.values().stream().collect(Collectors.toList());
valueList.forEach(System.out::println);
}
}
実行結果
---Mapデータ---
1=apple
2=banana
3=cherry
---Listデータ---
apple
banana
cherry
MapをListに変換する(MapのEntry(KeyとValue)を配列にする)
MapのEntry(KeyとValue)を配列に変換する方法です。
package com.app;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
System.out.println("---Mapデータ---");
Map<Integer, String> map = new HashMap<Integer, String>() {
{
put(1, "apple");
put(2, "banana");
put(3, "cherry");
}
};
map.entrySet().stream().forEach(System.out::println);
System.out.println("---リストデータ---");
List<Map.Entry<Integer, String>> entryList = map.entrySet().stream().collect(Collectors.toList());
entryList.forEach(System.out::println);
}
}
実行結果
---Mapデータ---
1=apple
2=banana
3=cherry
---配列データ---
1=apple
2=banana
3=cherry
Mapを配列に変換する(MapのKeyのみ配列にする)
MapのKeyを配列に変換する方法です。
package com.app;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
System.out.println("---Mapデータ---");
Map<Integer, String> map = new HashMap<Integer, String>() {
{
put(1, "apple");
put(2, "banana");
put(3, "cherry");
}
};
map.entrySet().stream().forEach(System.out::println);
System.out.println("---配列データ---");
Integer[] keyArray = map.keySet().stream().toArray(Integer[]::new);
Arrays.stream(keyArray).forEach(System.out::println);
}
}
実行結果
---Mapデータ---
1=apple
2=banana
3=cherry
---配列データ---
1
2
3
Mapを配列に変換する(MapのValueのみ配列にする)
MapのValueを配列に変換する方法です。
package com.app;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
System.out.println("---Mapデータ---");
Map<Integer, String> map = new HashMap<Integer, String>() {
{
put(1, "apple");
put(2, "banana");
put(3, "cherry");
}
};
map.entrySet().stream().forEach(System.out::println);
System.out.println("---配列データ---");
String[] valueArray = map.values().stream().toArray(String[]::new);
Arrays.stream(valueArray).forEach(System.out::println);
}
}
実行結果
---Mapデータ---
1=apple
2=banana
3=cherry
---配列データ---
apple
banana
cherry
Mapを配列に変換する(MapのEntry(KeyとValue)をListにする)
MapのEntry(KeyとValue)を配列に変換する方法です。
package com.app;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
public class Main {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
System.out.println("---Mapデータ---");
Map<Integer, String> map = new HashMap<Integer, String>() {
{
put(1, "apple");
put(2, "banana");
put(3, "cherry");
}
};
map.entrySet().stream().forEach(System.out::println);
System.out.println("---配列データ---");
Entry<Integer, String>[] entryArray = map.entrySet().stream().toArray(Entry[]::new);
Arrays.stream(entryArray).forEach(System.out::println);
}
}
実行結果
---Mapデータ---
1=apple
2=banana
3=cherry
---配列データ---
1=apple
2=banana
3=cherry
データの合計
Listデータの合計
シンプルなListデータの合計を計算します。
package com.app;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
System.out.println("---Intger,int型の合計---");
List<Integer> listInt = Arrays.asList(1, 2, 3, 4);
int sumInt = listInt.stream().mapToInt(Integer::intValue).sum();
System.out.println(sumInt);
System.out.println("---Long,long型の合計---");
List<Long> listLong = Arrays.asList(1L, 2L, 3L, 4L);
long sumLong = listLong.stream().mapToLong(Long::intValue).sum();
System.out.println(sumLong);
System.out.println("---Double,double型の合計---");
List<Double> listDouble = Arrays.asList(0.1, 0.2, 0.3, 0.4);
double sumDouble = listDouble.stream().mapToDouble(Double::doubleValue).sum();
System.out.println(sumDouble);
}
}
実行結果
--Intger,int型の合計---
10
--Long,long型の合計---
10
--Double,double型の合計---
1.0
配列データの合計
シンプルな配列データの合計を計算します。
package com.app;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
System.out.println("---Intger,int型の合計---");
Integer[] arrayInt = {1, 2, 3, 4};
int sumInt = Arrays.stream(arrayInt).mapToInt(Integer::intValue).sum();
System.out.println(sumInt);
System.out.println("---Long,long型の合計---");
Long[] arrayLong = {1L, 2L, 3L, 4L};
long sumLong = Arrays.stream(arrayLong).mapToLong(Long::intValue).sum();
System.out.println(sumLong);
System.out.println("---Double,double型の合計---");
Double[] arrayDouble = {0.1, 0.2, 0.3, 0.4};
double sumDouble = Arrays.stream(arrayDouble).mapToDouble(Double::doubleValue).sum();
System.out.println(sumDouble);
}
}
データの最大値・最小値
Listデータの最大値・最小値
Listデータの最大値・最小値を求めます。
package com.app;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
public class Main {
public static void main(String[] args) {
System.out.println("---Listの最大値---");
List<Integer> listMax = Arrays.asList(1, 2, 3, 4);
Optional<Integer> maxOpt = listMax.stream().max(Integer::compare);
int max = maxOpt.orElse(0);
System.out.println(max);
System.out.println("---Listの最小値---");
List<Integer> listMin = Arrays.asList(1, 2, 3, 4);
Optional<Integer> minOpt = listMin.stream().min(Integer::compare);
int min = minOpt.orElse(0);
System.out.println(min);
}
}
実行結果
---Listの最大値---
4
---Listの最小値---
1
配列データの最大値・最小値
配列データの最大値・最小値を求めます。
package com.app;
import java.util.Arrays;
import java.util.Optional;
public class Main {
public static void main(String[] args) {
System.out.println("---Listの最大値---");
Integer[] arrayMax = {1, 2, 3, 4};
Optional<Integer> maxOpt = Arrays.stream(arrayMax).max(Integer::compare);
int max = maxOpt.orElse(0);
System.out.println(max);
System.out.println("---Listの最小値---");
Integer[] arrayMin = {1, 2, 3, 4};
Optional<Integer> minOpt = Arrays.stream(arrayMin).min(Integer::compare);
int min = minOpt.orElse(0);
System.out.println(min);
}
}
実行結果
---Listの最大値---
4
---Listの最小値---
1
特定のデータの個数
Listデータの特定の個数
Listデータの特定のデータの個数を計算します。
package com.app;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
System.out.println("---Listの2より大きい個数---");
List<Integer> listCount = Arrays.asList(1, 2, 3, 4);
long count = listCount.stream().filter(val -> 2 < val).count();
System.out.println(count);
}
}
実行結果
---Listの2より大きい個数---
2
配列データの特定の個数
配列データの特定のデータの個数を計算します。
package com.app;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
System.out.println("---配列の2より大きい個数---");
Integer[] arrayCount = { 1, 2, 3, 4 };
long count = Arrays.stream(arrayCount).filter(val -> 2 < val).count();
System.out.println(count);
}
}
実行結果
---配列の2より大きい個数---
2
データの平均
Listデータの平均
Listデータの平均を計算します。
package com.app;
import java.util.Arrays;
import java.util.List;
import java.util.OptionalDouble;
public class Main {
public static void main(String[] args) {
System.out.println("---Listの平均-Integer,int型---");
List<Integer> listIntCount = Arrays.asList(1, 2, 3, 4, 5);
OptionalDouble averageIntOpt = listIntCount.stream().mapToDouble(Integer::intValue).average();
double averageInt = averageIntOpt.orElse(0.0);
System.out.println(averageInt);
System.out.println("---Listの平均-Long,long型---");
List<Long> listLongCount = Arrays.asList(6L, 7L, 8L, 9L, 10L);
OptionalDouble averageLongOpt = listLongCount.stream().mapToDouble(Long::longValue).average();
double averageLong = averageLongOpt.orElse(0.0);
System.out.println(averageLong);
System.out.println("---Listの平均-Double,double型---");
List<Double> listDoubleCount = Arrays.asList(11.0, 12.0, 13.0, 14.0, 15.0);
OptionalDouble averageDoubleOpt = listDoubleCount.stream().mapToDouble(Double::doubleValue).average();
double averageDouble = averageDoubleOpt.orElse(0.0);
System.out.println(averageDouble);
}
}
実行結果
---Listの平均-Integer,int型---
3.0
---Listの平均-Long,long型---
8.0
---Listの平均-Double,double型---
13.0
配列データの平均
配列データの平均を計算します。
package com.app;
import java.util.Arrays;
import java.util.OptionalDouble;
public class Main {
public static void main(String[] args) {
System.out.println("---配列の平均-Integer,int型---");
Integer[] arrayIntCount = { 1, 2, 3, 4, 5 };
OptionalDouble averageIntOpt = Arrays.stream(arrayIntCount).mapToDouble(Integer::intValue).average();
double averageInt = averageIntOpt.orElse(0.0);
System.out.println(averageInt);
System.out.println("---配列の平均-Long,long型---");
Long[] arrayLongCount = { 6L, 7L, 8L, 9L, 10L };
OptionalDouble averageLongOpt = Arrays.stream(arrayLongCount).mapToDouble(Long::longValue).average();
double averageLong = averageLongOpt.orElse(0.0);
System.out.println(averageLong);
System.out.println("---配列の平均-Double,double型---");
Double[] arrayDoubleCount = { 11.0, 12.0, 13.0, 14.0, 15.0 };
OptionalDouble averageDoubleOpt = Arrays.stream(arrayDoubleCount).mapToDouble(Double::doubleValue).average();
double averageDouble = averageDoubleOpt.orElse(0.0);
System.out.println(averageDouble);
}
}
実行結果
---配列の平均-Integer,int型---
3.0
---配列の平均-Long,long型---
8.0
---配列の平均-Double,double型---
13.0
コメント