마크 Sholund :
내가 다른 스트림에 동일한 작업을 적용 할 것 (순간에 자바 8을 사용)
배경 : 나는 티카에서 차원 데이터를 얻기 위해 노력하고 메타 데이터 오브젝트
다음 작동하지만 반복 코드 ( 메타 데이터 티카입니다 메타 데이터 개체) :
private static void processDimensions(final Metadata metadata) {
Optional<Integer> optWidth = Arrays.stream(new String[] {"tiff:ImageWidth", "Image Width"})
.map(metadata::get)
.filter(Objects::nonNull)
.map(v -> v.replace("pixels", ""))
.map(Integer::parseInt).findFirst();
// do something with optWidth
Optional<Integer> optHeight = Arrays.stream(new String[] {"tiff:ImageLength", "Image Height"})
.map(metadata::get)
.filter(Objects::nonNull)
.map(v -> v.replace("pixels", ""))
.map(Integer::parseInt).findFirst();
// do something with optHeight
}
나는하지 반복 코드를 않는이 시점에 입수했습니다 :
private static void processDimensions(final Metadata metadata) {
Optional<Integer> optWidth = processDimension(metadata, "tiff:ImageWidth", "Image Width");
// do something with optWidth
Optional<Integer> optHeight = processDimension(metadata, "tiff:ImageLength", "Image Height");
// do something with optHeight
}
private static Optional<Integer> processDimension(final Metadata metadata, @NonNull final String... keys) {
return Arrays.stream(keys).map(metadata::get).filter(Objects::nonNull).map(v -> v.replace("pixels", ""))
.map(Integer::parseInt).findFirst();
}
이 같은 별도의 방법이없는이 같은 일을 할 수 내부 기능입니다 processDimensions () ? 어떻게 표정이 것?
라빈 드라 Ranwala :
예 A와 선언 java.util.Function
및 재사용.
Function<String[], OptionalInt> funct = keys -> Arrays.stream(keys)
.map(metadata::get)
.filter(Objects::nonNull)
.map(v -> v.replace("pixels", ""))
.mapToInt(Integer::parseInt)
.findFirst();
다음은 호출 방법입니다.
funct.apply(strArr);
사실, 방법을 선언하는 등 훨씬 더 읽을 수있는 이름을 제공 processDimensions
하고, 따라서 훨씬 더 읽기 나에게, 람다보다 설명적인 이름을 가진 매개 변수 유형을 선언합니다. 당신이 잘 스트림에 정통한하지 않는 한, 당신은 힘든 시간이 파이프 라인을 읽기를 찾을 수 있습니다. 또한, 방법은 사실상의 API를 정의하지만 스트림 파이프 라인은 일반적으로하지 않습니다.