program story

Lambda를 사용하는 Java 8 필터 어레이

inputbox 2020. 12. 30. 08:08
반응형

Lambda를 사용하는 Java 8 필터 어레이


나는 a가 double[]있고 for루프 를 추가하지 않고 한 줄에서 음수 값을 필터링하지 않고 새 배열을 만들고 싶습니다 . Java 8 람다 식을 사용하여 가능합니까?

파이썬에서는 생성기를 사용하면 다음과 같습니다.

[i for i in x if i > 0]

Java 8에서 비슷하게 간결한 작업을 수행 할 수 있습니까?


예, DoubleStream배열에서 생성 하고 음수를 필터링 한 다음 스트림을 다시 배열로 변환하여이를 수행 할 수 있습니다. 다음은 그 예입니다.

double[] d = {8, 7, -6, 5, -4};
d = Arrays.stream(d).filter(x -> x > 0).toArray();
//d => [8, 7, 5]

그렇지 않은 참조 배열을 필터링 하려면 결과로 원래 유형의 배열을 가져 오기 위해 Object[]를 사용하는 toArray메소드 를 사용해야합니다 IntFunction.

String[] a = { "s", "", "1", "", "" };
a = Arrays.stream(a).filter(s -> !s.isEmpty()).toArray(String[]::new);

더 간단합니다 String[].

내장에 사용되는 필터 filter(StringUtils::isNotEmpty)org.apache.commons.lang3

import org.apache.commons.lang3.StringUtils;

    String test = "a\nb\n\nc\n";
    String[] lines = test.split("\\n", -1);


    String[]  result = Arrays.stream(lines).filter(StringUtils::isNotEmpty).toArray(String[]::new);
    System.out.println(Arrays.toString(lines));
    System.out.println(Arrays.toString(result));

및 출력 : [a, b, , c, ] [a, b, c]

참조 URL : https://stackoverflow.com/questions/24112715/java-8-filter-array-using-lambda

반응형