Как достать число из списка, который находится в очереди в java?

Рейтинг: -1Ответов: 1Опубликовано: 27.07.2023
static void BFS(ArrayList<String> map, int [] s, int [] t){
    int n = map.size();
    int m = map.get(0).length();
    final int INF = (int) Math.pow(10, 9);
    int [][] delta = {{0, -1}, {0, 1}, {1, 0}, {-1, 0}};
    int[][]arrayINFmap = new int[n][m];
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            arrayINFmap[i][j] = INF;
        }
    }
    String[][]arrayTFmap = new String[n][m];
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            arrayTFmap[i][j] = "False";
        }
    }
    // проблема тут
    ArrayDeque<List> deque = new ArrayDeque<>();
    arrayINFmap[s[0]][s[1]] = 0;
    arrayTFmap[s[0]][s[1]] = "True";
    deque.add(Arrays.asList(s));
    while (deque.size() != 0){
        int x = deque.peekFirst().get(0);
        int y = deque.peekFirst().get(1);
    }
}

тут проблема в том, что get возвращает Object. А мне int нужен

Ответы

▲ 0Принят

Чтобы достать число из списка, который находится в очереди в java требуется как минимум объявить, что очередь содержит списки чисел Deque<List<Integer>>, а не нечто "сырое" Deque<List>. Об этом указал в своём комментарии Roman C.

Однако после такого объявления потребуется правильно преобразовать массив примитивных целых чисел int[] s в требуемый список.

Arrays.asList(int[] arr) НЕ преобразует массив в список, так как он работает только с массивами объектов, т.е. как минимум нужно иметь Integer[].

Преобразовать массив в список можно массой способов, см. array -> ArrayList при разных типах массивов, в основном через Stream API:

  • Получить экземпляр ArrayList при помощи Collectors.toList() (Java 8+)
  • Получить иммутабельный список при помощи Stream::toList(Java 16+)
// ...
    Deque<List<Integer>> deque = new ArrayDeque<>();
    arrayINFmap[s[0]][s[1]] = 0;
    arrayTFmap[s[0]][s[1]] = "True";
    deque.add(Arrays.stream(s).boxed().collect(Collectors.toList())); // Java 8
    while (deque.size() != 0){
        int x = deque.peekFirst().get(0);
        int y = deque.peekFirst().get(1);
    }
// ...