2014-04-16 1 views
0

클래스 Target의 객체와 클래스 FriendOfTarget의 객체 세트가 있다고 가정합니다. Java8 : 이것에 대한 매칭 및 매핑

public class Target{ 

    private List<FriendOfTarget> completeListOfFriendOfTargets; 

    public boolean matchSomething(FriendOfTarget fot){ 
     //do something by comparing the fields of Target and FriendOfTarget 
    } 

    public List<FriendOfTarget> reduce(){ 
     // 
    } 

} 

public class FriendOfTarget{ 
    // 
} 

내가 FriendOfTarget 개체의 목록을 구성하려면

, Java7에서 나는 클래스 Target에서 방법 reduceByParam 내에서 다음을 수행하십시오

public List<FriendOfTarget> reduce(){ 
    List<FriendOfTarget> lst= new ArrayList<>(); 
    for(FriendOfTarget fot: completeListOfFriendOfTargets){ 
    if(reduceByThis(fot)) 
     lst.add(fot); 
    } 
    return lst; 
} 

어떻게 Java8에서 동일한 작업을 수행 할 수 있습니까? thisanyMatch 방법으로 참조하는 방법에 대한 예제를 찾는 데 어려움이 있습니다. stream입니다. this::reduceByThis

람다 식 this 액세스 할 수

  • 람다 식 : fot -> reduceByThis(fot)
  • 방법을 참조하는 기능 인터페이스를 구현하는 방법은 두 가지가있다

+0

두 번째 목록에 오타가되고 대신 _matchSomething_의 _reduceByParam_해야합니다. _anyMatch_와 관련된 코드와 _this_에 문제가있는 코드가 없습니다. – nosid

+0

네, 맞습니다! 제발, 당신 ​​것이 영광입니다. 제 질문을 수정하십시오! –

답변

2

, 즉 을 지칭 둘러싸는 범위와 같은 방법으로. 즉, 자격이있는 경우와없는 경우 모두 reduceByThis 메서드를 호출 할 수 있습니다. 메소드 참조의 경우 해당 대상 객체를 명시 적으로 바인딩 할 수 있습니다.

public List<FriendOfTarget> reduce() { 
    return completeListOfFriendOfTargets 
     .stream() 
     .filter(this::reduceByThis) 
     .collect(toList()); 
} 

또한 람다 표현식에서 명시 적으로 this을 사용할 수 있습니다 : 다음 예제는 후자를 보여줍니다. 이미 언급했듯이, 익명의 내부 클래스와는 대조적으로 enclosing 범위의 this을 참조합니다. 예를 들어 :

public List<FriendOfTarget> reduce() { 
    return completeListOfFriendOfTargets 
     .stream() 
     .filter(fot -> fot.reduceOtherDirection(this)) 
     .collect(toList()); 
} 
+0

Ups! 당신 말이 맞아요. 원래 int param이 아니기 때문에,이 것이 었습니다! –

관련 문제