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
'programing' 카테고리의 다른 글
다형성:"ArrayList list = new ArrayList" 대신 "List list = new ArrayList"를 사용하는 이유는 무엇입니까? (0) | 2022.07.19 |
---|---|
vuex 스토어에서 vue-logger를 사용하려면 어떻게 해야 합니까? (0) | 2022.07.19 |
Vue 템플릿 vs Vue jsx (0) | 2022.07.17 |
VueJ - 동적 데이터로 URL 업데이트 (0) | 2022.07.17 |
중복되는 사용자 아이콘 생성 (0) | 2022.07.17 |