Сохранение последнего «принятого местоположения» объекта. Затем проверьте каждый новый объект Location и используйте его свойство «precision». Просто проверьте его, чтобы сравнить с предыдущим известным местоположением. Если точность повысилась, а адрес отличается, обновите принятый объект местоположения и сохраните его. Если точность хуже или адрес тот же, просто отбросьте его.
private Location currentLocation;
//inside Location Update Method
if(newLocation.getAccuracy() < currentLocation.getAccuracy()){
currentLocation = newLocation;
//update database location info
}
Set
является инвариантным в его параметре типа из-за понятия позади наборов как функции. Следующие подписи должны разъяснить вещи немного:
trait Set[A] extends (A=>Boolean) {
def apply(e: A): Boolean
}
Если Set
были ковариантными в A
, apply
метод не мог бы взять параметр типа A
из-за контравариантности функций. Set
мог потенциально быть контравариант в A
, но это также вызывает проблемы, когда Вы хотите сделать вещи как это:
def elements: Iterable[A]
Короче говоря, лучшее решение состоит в том, чтобы сохранить вещи инвариантом, даже для неизменной структуры данных. Вы заметите это immutable.Map
является также инвариантным в одном из его параметров типа.
Править: для любого задающегося вопросом, почему этот ответ кажется немного вне темы, это вызвано тем, что я (корреспондент) изменил вопрос.
Вывод типа Scala достаточно хорош, чтобы выяснить желание CharSequences и не Строк в некоторых ситуациях. В частности, следующие работы для меня в 2.7.3:
import scala.collections.immutable._
def findCharSequences(): Set[CharSequence] = Set("Hello", "World")
Относительно того, как создать неизменный. HashSets непосредственно: не делать. Как оптимизация реализации, неизменная. HashSets меньше чем 5 элементов не являются на самом деле экземплярами неизменных. HashSet. Они - или EmptySet, Set1, Set2, Set3 или Set4. Эти классы неизменный подкласс. Набор, но не неизменный. HashSet.