메모를 원한다는 소리가납니다. Functional Java의 최신 트렁크 헤드에는 결과가 캐싱 된 계산을 모델링하는 memoising 제품 유형 P1
이 있습니다.
당신은 다음과 같이 사용합니다 :
비싼 계산을 실행하고 메모에 저장됩니다 _1()를 처음 호출
P1<Thing> myThing = new P1<Thing>() {
public Thing _1() {
return expensiveComputation();
}
}.memo();
. 그 후 메모가 대신 반환됩니다.
"두 개의 키"에 대해 간단한 쌍 유형을 원할 수 있습니다. 기능 Java는 클래스 P2<A, B>
의 형태로도 이것을 가지고 있습니다. 이러한 값을 메모하려면 단순히 P1<P2<A, B>>
을 사용하십시오.
memoisation 대신 Promise<A>
클래스를 사용할 수도 있습니다. 이것은 잠시 동안 도서관에 있었기 때문에 최신 바이너리가 필요할 것입니다. 다음과 같이 사용하십시오 :
Promise<Thing> myThing =
parModule(sequentialStrategy).promise(new P1<Thing>() {
public Thing _1() {
return expensiveComputation();
}
});
결과를 얻으려면 myThing.claim()
으로 전화하십시오. Promise<A>
은 결과가 아직 준비되지 않은 경우에도 이상의 함수를 매핑하는 방법을 제공합니다..
import static fj.control.parallel.ParModule.parModule
및 fj.control.parallel.Strategy.sequentialStrategy
이 필요합니다. 계산을 자체 스레드에서 실행하려면 sequentialStrategy
을 Strategy
클래스가 제공하는 다른 전략 중 하나로 바꾸십시오.
무시 무시한 ... 나는 * 단지 * 5 분 전에 이것을 했으므로 다음과 같이이 질문을 보았습니다 ... hashCode 메서드의 구현을 권장합니다 (이것은 기본 일식 구현입니다). (31 + thing1.hashCode()) * 31 + thing2.hashCode();' – Kip
@Kip : 사실, Apache Commons Lang의'HashCodeBuilder','EqualsBuilder','CompareToBuilder'를 사용하는 것이 좋습니다. :-) –
이 프로그램을 구현하는 데 10 분 미만의 시간이 걸렸으며 지금은 25 %의 시간 동안 프로그램이 실행됩니다. 와우. –