자바 커링
3725 단어 java
여기에서 전체 코드를 찾을 수 있습니다: curry_example.jsh .
Currying은
n
매개변수가 있는 함수를 취하고 원래 함수의 n
매개변수에 도달할 때까지 하나의 매개변수가 있는 함수를 반환하는 하나의 매개변수가 있는 함수를 반환한 다음 결과를 얻는 것입니다.다음 메서드는 서명이 있는 메서드의 커리 버전을 가져옵니다.
int methodName(int a, int b)
그리고 커링된 버전을 반환합니다.
public static Function<Integer, Function<Integer, Integer>> toCurry(
BiFunction<Integer, Integer, Integer> function) {
return v -> v1 -> function.apply(v, v1);
}
그런 다음 이를 사용하여 이러한 메서드의 카레 버전을 얻을 수 있습니다.
var curriedAdd = toCurry(Math::addExact);
var curriedMultiply = toCurry(Math::multiplyExact);
다음과 같이 사용하십시오.
System.out.format("curriedAdd(2)(10): %d\n",curriedAdd.apply(2).apply(10));
System.out.format("curriedMultiply(2)(10): %d\n",curriedMultiply.apply(2).apply(10));
다음 예에서는 커링된 버전을 사용하여 먼저 1을 더한 다음 스트림의 모든 요소에 2를 곱합니다.
var add1 = toCurry(Math::addExact).apply(1);
var multiplyBy2 = toCurry(Math::multiplyExact).apply(2);
List.of(0, 1, 2, 3, 4).stream().map(add1).map(multiplyBy2).forEach(System.out::println);
partial application
의 형태로 커링을 사용할 수 있습니다. 다음과 같은 방법이 있다고 상상해 보세요.public static String wget(
int connectionTimeout,
int readTimeout,
boolean followRedirects,
String requestMethod,
String address) {
try {
URL url = new URL(address);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod(requestMethod);
con.setConnectTimeout(connectionTimeout);
con.setReadTimeout(readTimeout);
con.setInstanceFollowRedirects(followRedirects);
return address + " " + con.getResponseCode();
} catch (Exception e) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
String stackTrace = sw.toString();
return address + " " + stackTrace.substring(0, stackTrace.indexOf("\n"));
}
}
이 메소드는
http status
또는 발생한 경우 예외의 일부를 반환합니다.이렇게 사용하면 함수를 사용할 때마다 모든 매개변수를 설정해야 하지만 커리 버전이 있는 경우:
public static Function<Integer, Function<Boolean, Function<String, Function<String, String>>>>
cwget(int v) {
return v1 -> v2 -> v3 -> v4 -> wget(v, v1, v2, v3, v4);
}
그런 다음 가지고 있는 매개변수를 설정할 수 있습니다.
var get = cwget(100).apply(100).apply(false).apply("GET");
그런 다음 함수를 사용할 때 이름 바꾸기 매개변수를 채우십시오.
List.of(
"https://www.google.com",
"https://www.wikipedia.org",
"asdf",
"https://docs.oracle.com/javase/10/docs/api/java/net/package-summary.html",
"https://jsedano.dev",
"https://raw.githubusercontent.com/center-key/clabe-validator/main/clabe.ts")
.parallelStream()
.map(get)
.forEach(System.out::println);
이 게시물에서 전체 코드를 다운로드하십시오: curry_example.jsh .
Reference
이 문제에 관하여(자바 커링), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jsedano/currying-in-java-2hm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)