
int[] a = {1,2,3};
int[] b = {4,5};
String a = "hi my name is";
String[] b = a.split(" +");
Stream<String> b1 = Stream.of(b);
//참고
IntStream stream = Arrays.stream(a);
Stream<int[]> a1 = Stream.of(a);
int[] c2 = Stream.of(a, b).flatMapToInt((v)->{
System.out.println(Arrays.toString(v));
return Arrays.stream(v);
}).toArray();
System.out.println(Arrays.toString(c));
결과
[1, 2, 3]
[4, 5]
[1, 2, 3, 4, 5]
+)
Stream<String> b1 = Stream.of(b);
Stream<String> stream = Arrays.stream(b);
Stream<Stream<String>> streamStream = stream.map(v -> Stream.of(v));
Stream<String> stringStream = stream.flatMap(v -> Stream.of(v));
Arrays.stream은 public static <T> Stream<T> stream(T[] array) 다음과 같다.
int[] -> Stream<int>(=IntStream) 이 된다.
Stream.of는 public static<T> Stream<T> of(T t) 다음과 같다.
int[] -> Stream<int[]> 가 된다.
+) String[]은 -> Stream<String>이 된다.
배열 한 겹이 벗겨진 stream이냐 그대로 stream이냐 차이가 있다.
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
flatMap은 람다식에서 입력 T를 Stream<T> 형태로 반환하면 모든 반환 Stream<T>를 하나의 Stream<T>로 펼쳐 준다.
IntStream flatMapToInt(Function<? super T, ? extends IntStream> mapper);
flatMapToInt는 바로 모든 IntStream을 IntStream으로 반환한다.
Integer[][] input = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int[][] output = Arrays.stream(input)
.map(row -> Arrays.stream(row)
.mapToInt(Integer::intValue)
.toArray())
.toArray(int[][]::new);
한 겹을 벗기고 mapToInt를 속에서 해줘야 최종 toArray(int[][]::new)가 가능하다.
mapToInt 람다식에서 int를 만들어서 줘야한다.
Integer[][] test = new Integer[2][2];
System.out.println(Arrays.deepToString(test)); //[[null, null], [null, null]]
주의! Integer의 기본 초기값은 null이다.
int[] a = {1,2,3,4};
Integer[] b = Arrays.stream(a).boxed().toArray(Integer[]::new)
//참고
IntStream stream = Arrays.stream(a);
Stream<Integer> boxed = Arrays.stream(a).boxed();
IntStream을 Stream<Integer>로 바꿔준 후 진행한다.
Integer[] b = Arrays.stream(a).boxed().toArray(Integer[]::new);
//Integer[] b = Arrays.stream(a).boxed().toArray(new Integer[]{}); Err
ArrayList<Integer> c = new ArrayList<Integer>();
c.toArray(new Integer[]{});
(1)(ArrayList).toArray과 (2)(stream).toArray는 다르다.
(1)은 객체 인스턴스도 인자로 받지만 (2)는 intFucntion을 인자로 받는다.
static method는 ctrl+마우스로 계속 따라가볼 수 있다.
interface를 구현한 클래스로 따라가는 방법은 없나?
ex) Stream관련 메서드들은 따라가면 interface만 나온다.
자바로 알고리즘 문제 풀 때
일단 input을 Wrapper로 바꿔서 풀고 최종 반환에서 원하는 형태로 바꿔주자.