Stream API는 객체지향과 함께 사용하면 좋습니다.
대표적으로 for, if -> stream으로 사용할 수 있습니다.
대표적인 stream api를 알아보겠습니다. ( 자세한 stream api 는 별도의 카테코리를 만들어 진행하겠습니다 )
forEach
public class ForIterationExampleMain {
public static void main(String[] args) {
List<Integer> integerList = new ArrayList<>();
integerList.add(10);
integerList.add(20);
integerList.add(30);
integerList.add(40);
integerList.add(50);
integerList.add(60);
integerList.add(70);
for (int i = 0; i < integerList.size(); i++) {
System.out.println(integerList.get(i));
}
}
}
public class ForEachIterationExampleMain {
public static void main(String[] args) {
List<Integer> integerList = new ArrayList<>();
integerList.add(10);
integerList.add(20);
integerList.add(30);
integerList.add(40);
integerList.add(50);
integerList.add(60);
integerList.add(70);
integerList.stream().forEach(integer -> {
System.out.println(integer);
if(integer.equals(40)) {
throw new RuntimeException();
}
});
}
}
filter
public class FilterExampleMain {
public static void main(String[] args) {
List<Integer> integerList = new ArrayList<>();
integerList.add(10);
integerList.add(20);
integerList.add(30);
integerList.add(40);
integerList.add(50);
integerList.add(60);
integerList.add(70);
Integer findNumber = integerList.stream().filter(integer -> {
System.out.println(integer);
if(integer.equals(40))
return true;
return false;
}).findAny().get();
System.out.println("findNumber=" + findNumber);
}
}
map ( 수에 * 10 )
public class ForMapExampleMain {
public static void main(String[] args) {
List<Integer> integerList = new ArrayList<>();
integerList.add(10);
integerList.add(20);
integerList.add(30);
integerList.add(40);
integerList.add(50);
integerList.add(60);
integerList.add(70);
List<Integer> x10IntegerList = new ArrayList<>();
for (int i = 0; i < integerList.size(); i++) {
x10IntegerList.add(integerList.get(i) * 10);
}
System.out.println(x10IntegerList);
}
}
public class MapExampleMain {
public static void main(String[] args) {
List<Integer> integerList = new ArrayList<>();
integerList.add(10);
integerList.add(20);
integerList.add(30);
integerList.add(40);
integerList.add(50);
integerList.add(60);
integerList.add(70);
List<Integer> x10IntegerList = integerList.stream()
.map(integer -> integer * 10)
.toList();
System.out.println(x10IntegerList);
}
}
filter + map ( 짝수만 뽑아서 * 10 )
public class ForAndIfExampleMain {
public static void main(String[] args) {
int[] integerArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
List<Integer> integerList = Arrays.stream(integerArray)
.boxed()
.toList();
System.out.println(integerList);
List<Integer> evenNumberList = new ArrayList<>();
for(int i = 0; i < integerList.size(); i++) {
if(integerList.get(i) % 2 == 0) {
evenNumberList.add(integerList.get(i));
}
}
System.out.println(evenNumberList);
List<Integer> evenX10NumberList = new ArrayList<>();
for(int i = 0; i < evenNumberList.size(); i++) {
evenX10NumberList.add(evenNumberList.get(i) * 10);
}
System.out.println(evenX10NumberList);
}
}
public class FilterAndMapExampleMain {
public static void main(String[] args) {
List<Integer> integerList = List.of(1,2,3,4,5,6,7,8,9,10);
System.out.println("integerList = " + integerList);
List<Integer> result = integerList.stream()
.filter(number -> number % 2 == 0)
.map(number -> number * 10)
.collect(Collectors.toList());
System.out.println("result = " + result);
}
}
Stream API 와 Map
public class MapStream {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("C", 3);
map.put("A", 1);
map.put("B", 2);
map.keySet().forEach(System.out::println); // 모든 키 출력
map.values().forEach(System.out::println); // 모든 값 출력
// 특정 조건에 만족하는 엔트리 (키와 값) 출력하기
List<Map.Entry<String, Integer>> collect = map.entrySet().stream()
.filter(entry -> entry.getValue() > 1)
.collect(Collectors.toList());
System.out.println("collect = " + collect);
// 값에 따라 정렬 후 키와 값 출력하기
map.entrySet().stream()
.sorted(Map.Entry.comparingByValue())
.forEach(System.out::println);
// 키를 기준으로 정렬 후 출력하기
map.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.forEach(System.out::println);
// 스트림을 이용하여 새로운 HashMap 만들기
Map<String, Integer> newMap = map.entrySet().stream()
.filter(entry -> entry.getValue() > 1)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
System.out.println("newMap = " + newMap);
}
}
'자바' 카테고리의 다른 글
자바 메모리 구조 (0) | 2023.12.13 |
---|---|
Stream & Optional & Parallel Stream (0) | 2023.12.12 |
슬기롭게 주석 사용하기 (0) | 2023.12.12 |
순회 하면서 컬렉션 수정하지 않기 (0) | 2023.12.12 |
SOLID (0) | 2023.12.12 |