Java8을 사용하는 경우 다음 코드는 훌륭한 해결책을 제공합니다.
Collector<Location, ?, Location> centreCollector = new CentreCollector();
Location centre = locations.stream().collect(centreCollector);
centre = locations.stream().filter(centre::furtherThan(NOISE_DISTANCE)).collect(centreCollector);
작성할 사항이 2 가지 있습니다. 콜렉터를 구현하고 Location 객체가 스트리밍 될 때 평균을내는 클래스 CentreCollector
. this
사이의 거리와 주어진 위치 사이의 거리를 주어진 거리와 비교하는 술어를 리턴하는 메소드 인 furtherThan
입니다.
약간 더 우아한 방법은 중심까지의 거리의 표준 편차를 계산 한 다음 평균 거리와 일정한 표준 편차 이상인 위치를 무시하는 것입니다. 이것은 모든 또는 대부분의 표본이 중심으로부터의 NOISE_DISTANCE보다 더 많은 위치의 집합을 고려하는 이점을 가질 것이다. 이 경우 CentreCollector는 위치 및 통계 정보를 보유하는보다 복잡한 객체를 반환해야하며 위치 대신 해당 클래스의 구성원으로 furtherThan
을 보유해야합니다. 표준 편차를 사용하기위한 동일한 코드를 게시하기를 원하면이 의견에 대해 알려주십시오.
자세한 내용은 http://stackoverflow.com/questions/18805178/how-to-detect-outliers-in-an-arraylist를 참조하십시오. – gknicker