Я пытаюсь выполнить leetcode - Учитывая массив целых чисел, каждый элемент появляется три раза, кроме одного, который появляется ровно один раз. Я пытаюсь использовать потоки, чтобы сделать это, чтобы я мог практиковать Java 8. Но я продолжаю получать разные ошибки. Я хотел бы использовать findFirst(), как только я нахожу элемент, который мне не нужно продолжать итерации по HashMap.«Переменные должны быть окончательными» ошибки компилятора при попытке использовать Java 8 streams API
public class Solution {
public int singleNumber(int[] nums) {
HashMap<Integer, Integer> map = new HashMap<>();
for (int num: nums){
if (map.containsValue(num))
map.put(num, map.get(num) +1);
else
map.put(num, 1);
}
map.forEach((k, v) -> {
if (v == 1)
return k;
});
}
}
Когда я бегу выше я получаю
Line 13: error: no suitable method found for forEach((k,v)->{ i[...] k; })
Когда я пытаюсь
public class Solution {
public int singleNumber(int[] nums) {
HashMap<Integer, Integer> map = new HashMap<>();
for (int num: nums){
if (map.containsValue(num))
map.put(num, map.get(num) +1);
else
map.put(num, 1);
}
Map<Integer, Integer> answer= map.entrySet().stream()
.filter(p -> p.getValue() == 1)
.findFirst()
.collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue()));
return answer.getValue();
}
}
я cannot resolve method collect
. Если я удаляю линию сбора, то он жалуется на необходимость точки с запятой.
Когда я пытаюсь
int number = 0;
map.forEach((k, v) -> {
if (v == 1)
number = k;
});
return number;
Я получаю Line 16: error: local variables referenced from a lambda expression must be final or effectively final
ожидаемый ответ
Но если я объявляю номер, чтобы быть окончательным, то он говорит, что я не могу назначить его.
Когда я пытаюсь (в последней строке в потоке)
.collect(Collectors.groupingBy(i -> i));
я получаю
Line 15: error: cannot find symbol: method collect(Collector>>)
Если удалить последнюю строку потока и изменить рядом с последней строки в
.findFirst());
Тогда я получаю
Line 14: error: ';' expected this is for two or three).
Если я
.findFirst();
Тогда я получаю
Line 14: error: incompatible types: Optional> cannot be converted to Map
«продолжайте получать разные ошибки» ... какие ошибки? быть конкретной? опубликуйте точно код, который терпит неудачу, и сообщите нам, что происходит с ошибкой. пока у вас это не получится, вопрос не в тему – nhouser9
В Entry Entry нет метода collect(). Вы выполняете итерацию и Set of Entry (EntrySet) – Rondo
Если я удалю сбор(), то я получаю Необязательный не может быть преобразован в Map.Line 14: ошибка: несовместимые типы: Необязательный> не может быть преобразован to Map Ожидаемый ответ –
Sam