2014-12-31 2 views
2

기본적으로 내가하고있는 일은 Java 용 인터페이스 시스템에서 작업하고 있으며 인터페이스는 구성 요소로 구성되어 있습니다. 표준 청취자는 사용할 수 없으므로 OpenGL을 사용하고 있습니다.람다 식에서 값을 반환 하시겠습니까?

기본적으로 내가 진정한 인터페이스의 "클릭"부울 반환 하나, 여기에 내가 그러나

if(Interface.interfaces.forEach((k, v)->v._clicked())) { 
} 

(성공에 대한 희망) 작성했던 코드가 있는지 알 수 있습니다 무엇을해야하는지,이 아니다 허용. 모든 인터페이스는 추상적이며 HashMap<>에 저장됩니다.

는 기본적으로 난 할 노력하고있어 않습니다 :

if(!Interface.interfaces.forEach((k, v)->v._clicked())) { 
    // Handle game related code 
} 

(일부 로직을 수행 한 후 추상 무효 clicked()를 호출)를 _clicked() 방법은 인터페이스 관련 코드를 처리, 그래서 어떤이 아닙니다 곳 else 문이 필요합니다. 이것의 전반적인 개념은 chatbox 등을 클릭하면 내 플레이어가 게임 세계와 상호 작용하지 않습니다.

나는 많은 톤의 인터페이스를 가지고 있으므로 멋지고 깔끔한 방식으로 반복 처리하면 좋습니다.

여기에서 람다를 사용할 수 없다면 매우 유감 스럽습니다. for/each Entry <>으로 해결할 수 있다는 것을 알고 있지만, 나는 그저 깎아지기 쉬운 우물 때문에 그것을 피하고 싶었습니다.

if (Interface.interfaces.values().stream().anyMatch(Interface::_clicked)) { 
    // ... 
} 

또는 :

if (Interface.interfaces.values().stream().noneMatch(Interface::_clicked)) { 
    // ... 
} 
+1

미안하지만, 더 많은 코드없이 나는 무엇을이 일과 아무 생각이 :

보장하기 위해 모든 대신 사용할 수있는 통화가 평가 클릭했습니다. 'forEach'는 어떻게 생겼습니까? 매개 변수리스트가 어떻게 보이는지,'k'와'v'의 타입,'_clicked' 메소드가 어떻게 생겼는지 알지 못하면 왜 이것이 허용되지 않거나 도움이되는지 알지 못합니다. – ajb

+0

분명히 두 명의 응답자가 마음을 읽고'Interface.interfaces'의 유형이 무엇인지 알아 냈습니다. 불행히도 그들은 두 가지 다른 아이디어를 생각해 냈습니다. 우리는 당신의 마음을 읽을 필요가 없도록 우리에게 말함으로써 우리를 도울 수 있습니다. – ajb

+0

@ajb - 명백히 _clicked()는 부울입니다. 무조건 if() 문으로 래핑되었으므로 이미 Interface.interfaces가 질문에서 'HashMap <>'이었습니다. – Hobbyist

답변

4

만 인터페이스 중 하나가 (`클릭에서 true를 반환 여부를 결정해야하는 경우, 제안 된 것과 같은)

+0

.reduce() 호출에 올바른 표시. – Hobbyist

3

나는 당신이 원하는 것은 생각 다음을 사용하십시오 :

Interface.interfaces.values().stream().anyMatch(Interface::_clicked)) 

hort-circuit, _clicked() 중 하나가 true를 반환하면 다른 것은 평가되지 않을 수 있습니다. 클릭 한 통화에 부작용이있는 경우 원하는 결과가 아닐 수 있습니다.

Interface.interfaces.stream().map(Interface::_clicked).reduce(false, (a, b) -> a || b); 
관련 문제