Google Guava:함수 프로그래밍

3649 단어
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"));
	}

좋은 웹페이지 즐겨찾기