Google Guava:함수 프로그래밍
guava에com이 존재합니다.google.common.base.Functions 및 com.google.common.base.Function 클래스, 이들을 이용하여 집합 클래스의 변환에 사용자 정의 변환 함수를 제공할 수 있습니다.
먼저 첫 번째 예를 보면 간단한 사용자 정의 함수를 본 다음에 간단한list 대상의 변환에 사용한다. 코드는 다음과 같다.
초기화된 코드:
static class School {
public String name;
public String location;
public static School newSchool(String name,String loc) {
School s = new School();
s.name = name;
s.location = loc;
return s;
}
}
List<School> schools;
@Before
public void init() {
schools = Lists.newLinkedList();
schools.addAll(Arrays.asList(School.newSchool("xigongda", "xi'an"),
School.newSchool("xijiaoda", "chengdu")));
}
@After
public void end() {
if(schools!=null) {
schools.clear();
}
}
다음은 첫 번째 테스트를 시작하여 기능 함수를 정의한 다음 컬렉션 변환에 사용합니다. 마지막 테스트 결과는 다음과 같습니다.
@Test
public void testFunctions1() {
// ,
//1、 , School
Function<School,String> f = new Function<School,String>() {
@Override
public String apply(School s) {
if(s==null) {
return "";
}
return s.location;
}
};
//2、
Collection<String> locationList = Collections2.transform(schools, f);
//3、
assertThat(locationList, hasItems("xi'an","chengdu"));
}
이것은 비교적 간단하지만 다른 함수를 조합하여 합병 연산을 해야 할 수도 있다. 예를 들어 먼저 변환을 실행한 다음에 대소문자 변환을 실행해야 하는 경우도 있다. 이 경우guava도 지원한다. 코드는 다음과 같다.
@Test
public void testFunctions2() {
// ,
//1、 , School , :f(school)=location
Function<School,String> f = new Function<School,String>() {
@Override
public String apply(School s) {
if(s==null) {
return "";
}
return s.location;
}
};
//2、 , , :f(string)=STRING
Function<String,String> f2 = new Function<String,String>() {
@Override
public String apply(String s) {
if(s==null) {
return "";
}
return s.toUpperCase();
}
};
//3、 , f, f2 , :result=f2(f(school))
Function<School,String> f3 = Functions.compose(f2, f);
//4、
Collection<String> locationList = Collections2.transform(schools, f3);
//5、
assertThat(locationList, hasItems("XI'AN","CHENGDU"));
}
마지막으로guava는 미리 정의된 맵 기반 맵 함수를 지원합니다. 즉 맵을 주면 맵의 키/value 정의에 따라 집합된 요소를 키와 하나씩 일치하게 하고, 일치하는 것을 발견하면value를 되돌려줍니다. 코드는 다음과 같습니다.
@Test
public void testForMap() {
// map , forMap ,
//1、
Map<School,String> m = Maps.newHashMap();
m.put(schools.get(0), "hangtian");
//m.put(schools.get(1), "tielu");
//2、
Function<School,String> f = Functions.forMap(m,"UNKNOWN");
//3、 , schools ,
Collection<String> types = Collections2.transform(schools, f);
//4、
assertThat(types, hasItems("hangtian","UNKNOWN"));
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.