Перебирая 2D-список и помещая элементы в Hashtable - PullRequest
0 голосов
/ 29 октября 2018

У меня есть список координат точки, и я хочу перебрать 2D-список, а затем обработать элементы в хэш-функции, чтобы сгенерировать ключ для моей хеш-таблицы. Я немного изо всех сил пытаюсь перебрать точки List>, а также как передать координату (x, y) в качестве значения для хеш-таблицы (ключ, значение)?

public static List<List<Integer>> myMethod(int k, List<List<Integer>> points){

    Hashtable  pt = new Hashtable();

    for (int i = 0; i <points.size(); i++)
    {
        for (int j = 0; j < points.get(i).size(); j++)
        {
            Integer x = points.get(i);
            Integer y = points.get(j);
            pt.put(hashfunction( x, y), points.get(i));
        } 
    }

    //return list of pairs ;
}

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Вы должны быть в состоянии помочь себе, используя некоторые структуры данных, которые более точно отражают ваши данные. Если у вас есть точечные данные, рассмотрите возможность использования Pair, тогда ваши List точек - это действительно так!

Далее, все Map структуры в Java будут вычислять свои собственные значения хеш-функции, вам не нужно этого делать! Вам нужно будет рассчитать нужные ключи, хотя. Из вашего фрагмента не ясно, зачем вообще нужен Hashtable/Map - это локальная переменная, которая никогда не читается и будет собирать мусор сразу после выполнения метода. Таким образом, я догадался, что вы хотели вернуть это. Если это так, вы можете сделать:

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.lang3.tuple.Pair;
import com.google.common.collect.Lists;

public class TwoDimArray {

    public static Integer keyCalculator(Pair<Integer, Integer> point) {
        return point.getLeft() * point.getRight();
    }

     public static Map<Integer, Integer> myMethod(List<Pair<Integer, Integer>> points) {
        return points.stream()
                     .collect(Collectors.toMap(p -> keyCalculator(p), p -> p.getRight()));

    }

    public static void main(String[] args) {
        Pair<Integer, Integer> pointA = Pair.of(1, 2);
        Pair<Integer, Integer> pointB = Pair.of(3, 4);
        Pair<Integer, Integer> pointC = Pair.of(5, 6);
        List<Pair<Integer, Integer>> points = Lists.newArrayList(pointA, pointB, pointC);
        System.out.println("Points map: " + myMethod(points));

    }

}

Какие выходы:

Points map: {2=2, 12=4, 30=6}
0 голосов
/ 29 октября 2018
for (int i = 0; i <points.size(); i++) {
        List<Integer> in = points.get(i);
        for (int j = 0; j < in.size() - 1; j++) {
            Integer x = in.get(j);
            Integer y = in.get(j + 1);
            pt.put(hashfunction(x, y), points.get(i));
        } 
}
...