Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- abstract class Clusterable<T> {
- protected long id;
- abstract long getID();
- abstract double getDistance(T element);
- }
- class Cluster<T extends Clusterable> {
- private Map<Long, T> elements;
- public Cluster(){
- elements = new HashMap<>();
- }
- void addItem(T t){
- elements.put(t.getID(), t);
- }
- void near(long id, int top){
- T element = elements.get(id);
- elements.values()
- .stream()
- .sorted(Comparator.comparingDouble(element::getDistance))
- .skip(1) // se skoka sam sebe, nz dali vaka treba ili ne
- .limit(top)
- .forEach(System.out::println);
- }
- }
- class Point2D extends Clusterable<Point2D> {
- private float x, y;
- public Point2D(long id, float x, float y){
- this.id = id;
- this.x = x;
- this.y = y;
- }
- @Override
- long getID() {
- return id;
- }
- @Override
- double getDistance(Point2D element) {
- return Math.sqrt((x - element.x) * (x - element.x) + (y - element.y) * (y - element.y));
- }
- @Override
- public String toString(){
- return String.format("%d: (%.0f,%.0f)",id,x,y);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement