2014-10-20 2 views
2

Android 앱에서 기능 프로그래밍을 사용하고 Java8을 사용할 수 없어서 구아바 라이브러리를 사용하기로 결정했습니다. 그러나 Guava Library에는 REDUCE 집계가 없습니다. 누군가가 왜 그런지 설명 할 수 있다면 궁금 할 것입니다. 그러나 필요한 것은 해결 방법입니다.Guava 라이브러리에 축소가없는 이유는 무엇입니까?

어떻게 구아바의 REDUCE/DROP 함수 프로그래밍 기능을 시뮬레이트 할 수 있습니까? 예를 들어 FluentInterface에서 처음부터 코딩하지 않고 합계 또는 평균을 계산하는 방법 (함수 프로그래밍의 기본 원리 중 하나가 아닌가?)

Android에서 다른 라이브러리로이 작업을 수행했다면 알려 주시기 바랍니다.

답변

8

구아바는이를 지원하지 않습니다. 빌드해야 할 익명 클래스가 기존의 for 루프보다 훨씬 길기 때문입니다. 구아바는 의도적으로 제한된 기능 프로그래밍 스타일 기능 세트만을 제공합니다. 자세한 내용은 https://github.com/google/guava/wiki/FunctionalExplained#Caveats을 참조하십시오.

Guava가 이것을 제공했다고 가정 해 봅시다. 그것은 두 번째 버전은 훨씬 적은 상용구가 필요

int sum = 0; 
for (int value : integers) { 
    sum += value; 
} 

... 대

FluentIterable.from(integers).foldr(
    new BiFunction<Integer, Integer, Integer>() { 
    @Override Integer sum(Integer a, Integer b) { 
     return a + b; 
    } 
    }, 0); 

...처럼 보일해야 할 것이다. 언어에 람다가 없다면, 그럴 가치가 없습니다.

+0

@ u2gilles 또한 구아바에는 'BiFunction'과 같은 것이 없습니다. [IdeaGraveyard] (https://code.google.com/p/guava-libraries/wiki/IdeaGraveyard#Functions/Predicates_for_n_> = _2_inputs)를 참조하십시오. 및 [이번 호] (https://code.google.com/p/guava-libraries/issues/detail?id=218). – Xaerxess

+1

구아바에 의도적으로 제한된 기능 프로그래밍 기능이 있다는 것을 확인하고 설명해 주신 루이에게 감사드립니다. 하지만 필자는 여전히 REDUCE/COLLECT 기능이 기능 라이브러리에서 반드시 필요하다고 생각합니다. 귀하의 (또는 구글의) 간명 이유에 관해서는 사과와 오렌지를 내 마음에 비교하려고 조금하려고합니다. 기본 함수 라이브러리에는 두 번째 예제와의 비교가 실제로 가능하지 않은 많은 숨겨진 기능이 있습니다. 예, 두 번째 루프는 간단하지만 모두 "기능적"이 아닙니다. – u2gilles

+0

또한 코드가 잘 들여 쓰기 만하면 Verbosity는 큰 문제가되지 않습니다. 간단한 해결책을 찾지 못하면 Android에서 구아바를 사용하지 않고 Java6 Android에서 사용할 수있는 다른 함수 프로그래밍 라이브러리를 찾으려고합니다. 귀하 또는 누군가에게 제안이 있다면 알려주십시오. – u2gilles

관련 문제