Как вернуть iterator?

Добрый день.
В задаче есть метод, который должен возвращать Iterator. Метод ищет в HashMap необходимую строку.
public Iterator<String> getStringsContaining(String chars) {
		Iterator<String> iterator = this.stringSet.iterator();
		if((chars!=null)||(chars!=""))
		{
		HashSet<String> stringSetTemp = new HashSet<String>();
		while (iterator.hasNext()) {
		
			if(!iterator.next().contains(chars))
			{
				stringSetTemp.add(iterator.next());
			}
		}
		iterator = stringSetTemp.iterator();
		}
		return iterator;		
	}

Такой способ не работает, на тесте выдает NullPointExeption. Можно ли в принципе возвращать таким способом HashMap? Заранее спасибо за любую помощь.
  • Вопрос задан
  • 447 просмотров
Решения вопроса 1
Alexey_gr
@Alexey_gr
эксепшен вылезает, наверное потому что итератор пустой, добавь проверку hasNext
Вобще я не уверен, что это хорошая практика, вот так вот вернуть итератор неизвестно из чего. Лучше уже вернуть просто сет.
Ну или если есть возможность использовать java 8
public Stream<String> filterStringSet(final String filter) {
	if (filter == null || filter.isEmpty()) 
		return Stream.empty(); // можно конечно и null вернуть, но тогда это придется обрабатывать

	return stringSet.stream()
	.filter(str -> str.contains(filter));
}

// ну и потом 
filterStringSet("фильтр").forEach(System.out::println)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы