У меня есть метод (из которого я не могу изменить параметры, иначе это могло быть упрощено с помощью HashMaps ... подробнее об этом позже), который передает элемент в качестве параметра. Теперь у меня есть список экземпляров из этого другого класса, из которых один из его атрибутов имеет один и тот же тип этого элемента, и я хочу найти экземпляры в списке, которые соответствуют этому элементу (из которых должен быть только один). Это то, что я сделал, чтобы найти это:Как получить доступ к первому ненулевому члену списка в Java?
List<Instance> instances = ...
public static void checkItems(Item i) {
List<Instance> n = new ArrayList<>();
instances.forEach(p -> n.add(p.i == i ? p : null));
Instance currentInstance = n.get(0);
//Instance currentInstance = instances.stream().filter(p -> p.i == i).collect(Collectors.toList()).get(0);
}
Вы, вероятно, заметили две вещи прямо:
- я использовал условный оператор, который добавляет пустое значение в списке, когда условие ISN» т прошло
- Мой комментировал код, который был еще одна попытка решить эту проблему
Таким образом, в первом случае, я ставлю пустой, потому что она требует от вас, чтобы положить что-то, и нулевое значение probabl y работать проще, поэтому возникает вопрос: как мне получить доступ к первому ненулевому значению в списке (не прибегая к повторению по всему списку, чтобы найти его ...)?
Вы можете заметить, что я просто назначил первое значение списка n.get(0)
на currentInstance
, потому что я знаю, что только одно значение пройдет тест. Однако из-за некоторого другого кода, который я применяю к currentInstance
, это значение не может быть нулевым.
Просто примечание по второму пункту: способ, которым я пытался его решить с потоками, работает точно так, как планировалось, за исключением того, что список восстановленных экземпляров по какой-то причине не является прямой копией исходных экземпляров. Это привело к тому, что значения некоторых атрибутов были сброшены до значений по умолчанию, поэтому этот метод бесполезен.
EDIT: Я просто хотел упомянуть, что метод streams не работал из-за какой-то глупой ошибки, которую я сделал в другом классе, ничего не случилось с кодом, поэтому я буду использовать этот бит для решения моей проблемы : D
'instances.forEach (р -> если (р == я) n.add (р)),' –
У меня трудно понять, что ваш вопрос, и что этот метод должен делать. Он ничего не возвращает и не изменяет никакого состояния, поэтому ничего не делает. –
@JBNizet Это потому, что это всего лишь фрагмент этого рода большой вещи, которую я пишу, я не хотел добавленной путаницы, написав весь другой бессмысленный код. –