programing

Java: 지도 기능이 있나요?

shortcode 2022. 7. 19. 21:43
반응형

Java: 지도 기능이 있나요?

지도 기능이 필요해요.자바에는 이미 이런 게 있나요?

(궁금하신 분들을 위해:물론 이 사소한 기능의 실장 방법은 저도 알고 있습니다...)

Java 8 이후 JDK에서는 이를 위한 몇 가지 표준 옵션이 있습니다.

Collection<E> in = ...
Object[] mapped = in.stream().map(e -> doMap(e)).toArray();
// or
List<E> mapped = in.stream().map(e -> doMap(e)).collect(Collectors.toList());

및 을 참조해 주세요.

Java 6 에서는 JDK 에는 함수의 개념이 없습니다.

Guava에는 기능 인터페이스가 있지만
Collections2.transform(Collection<E>, Function<E,E2>)
합니다.

예:

// example, converts a collection of integers to their
// hexadecimal string representations
final Collection<Integer> input = Arrays.asList(10, 20, 30, 40, 50);
final Collection<String> output =
    Collections2.transform(input, new Function<Integer, String>(){

        @Override
        public String apply(final Integer input){
            return Integer.toHexString(input.intValue());
        }
    });
System.out.println(output);

출력:

[a, 14, 1e, 28, 32]

요즘 Java 8에서는 실제로 지도 기능이 있기 때문에 코드를 좀 더 간결하게 쓸 수 있을 것 같습니다.

Collection<String> hex = input.stream()
                              .map(Integer::toHexString)
                              .collect(Collectors::toList);

기능성 자바라고 불리는 훌륭한 라이브러리가 있습니다.이 라이브러리는 Java가 가지고 싶은 많은 것들을 처리하지만 Java는 가지고 있지 않습니다.한편, 이 뛰어난 언어 Scala도 있습니다.이 언어는 Java가 해야 할 모든 것을 실행하면서도 JVM용으로 작성된 어떤 것과도 호환이 되지 않습니다.

해서 다루세요.Collections2.transform()guava에서 가져옵니다.그 방법의 가장 큰 장점은 가장 큰 위험인 게으름이다.

「 」의 .Lists.transform()Collections2.transform():

이 함수는 느릿느릿 적용되며 필요할 때 호출됩니다.이는 반환된 목록이 뷰가 되기 위해 필요하지만 List.contains(java.lang)와 같은 벌크 조작에 대해 함수가 여러 번 적용됨을 의미합니다.오브젝트) 및 List.hashCode().이것이 잘 작동하려면 기능이 빠를 필요가 있습니다.반환된 목록이 뷰일 필요가 없을 때 평가를 게을리하지 않도록 반환된 목록을 선택한 새 목록에 복사합니다.

, .Collections2.transform()라이브 뷰가 표시되므로 소스 리스트의 변경이 변환 리스트에 영향을 준다고 합니다.이러한 동작은 개발자가 동작 방식을 인식하지 못하면 추적하기 어려운 문제로 이어질 수 있습니다.

한 번만 실행할 수 있는 좀 더 클래식한 "지도"를 원한다면, 훨씬 더 간단한 조작이 가능한 Guava의 지도도 사용하는 것이 좋습니다.다음은 구글의 예를 제시하겠습니다.

FluentIterable
       .from(database.getClientList())
       .filter(activeInLastMonth())
       .transform(Functions.toStringFunction())
       .limit(10)
       .toList();

transform()여기 지도 방식이 있습니다.는, 「Callbacks」와 같은 합니다.Collections.transform()반환된 목록은 읽기 전용입니다.copyInto()읽기-쓰기 목록을 가져옵니다.

그렇지 않으면 Java8이 람다와 함께 출시될 때 이 기능은 더 이상 사용되지 않습니다.

이것은 맵을 사용할 수 있는 다른 기능 lib입니다.http://code.google.com/p/totallylazy/

sequence(1, 2).map(toString); // lazily returns "1", "2"

오래된 질문이지만 다른 해결책을 제시하겠습니다.

java generic과 java 8 스트림을 사용하여 자신의 조작을 정의하기만 하면 됩니다.

public static <S, T> List<T> map(Collection<S> collection, Function<S, T> mapFunction) {
   return collection.stream().map(mapFunction).collect(Collectors.toList());
}

이렇게 코드를 작성할 수 있습니다.

List<String> hex = map(Arrays.asList(10, 20, 30, 40, 50), Integer::toHexString);

언급URL : https://stackoverflow.com/questions/3907394/java-is-there-a-map-function

반응형