Можно или использовать итератор непосредственно как Вы упомянутый, или иначе сохранить второй набор и добавить каждый объект, который Вы хотите удалить к новому набору, тогда removeAll в конце. Это позволяет Вам продолжать использовать безопасность типов цикла foreach за счет увеличенного использования памяти, и процессорное время (не должна быть огромная проблема, если Вы не имеете действительно, действительно большие списки или действительно старый компьютер)
public static void main(String[] args)
{
Collection<Integer> l = new ArrayList<Integer>();
Collection<Integer> itemsToRemove = new ArrayList<Integer>();
for (int i=0; i < 10; ++i) {
l.add(new Integer(4));
l.add(new Integer(5));
l.add(new Integer(6));
}
for (Integer i : l)
{
if (i.intValue() == 5)
itemsToRemove.add(i);
}
l.removeAll(itemsToRemove);
System.out.println(l);
}
Мое решение Kotlin состоит в том, чтобы использовать статический контекст Приложения:
class App : Application() {
companion object {
lateinit var instance: App private set
}
override fun onCreate() {
super.onCreate()
instance = this
}
}
И Строковый класс, который я использую везде:
object Strings {
fun get(@StringRes stringRes: Int, vararg formatArgs: Any = emptyArray()): String {
return App.instance.getString(stringRes, *formatArgs)
}
}
, Таким образом, у Вас может быть очевидный способ получения строк ресурса
Strings.get(R.string.some_string)
Strings.get(R.string.some_string_with_arguments, "Some argument")
, не удаляйте этот ответ, позволяйте мне сохранить тот.