Если вы хотите найти все записи, начинающиеся с текста (например, "f"), вы можете использовать метод subSet(from, to)
, например:
SortedSet<String> s = new TreeSet<String>(new Comparator<String>() {
public int compare( String s1, String s2 ) {
return s1.compareToIgnoreCase( s2 );
}
});
s.add( "Erich" );
s.add( "Erica" );
s.add( "Erin" );
s.add( "Dave" );
s.add( "Thomas" );
SortedSet<String> result = s.subSet( "e", "e" + Character.MAX_VALUE ); //"e" represents the user input
System.out.println(result);//prints [Erica, Erich, Erin]
result = s.subSet( "Eric", "Eric" + Character.MAX_VALUE );
System.out.println(result); //prints [Erica, Erich]
result = s.subSet( "Erich", "Erich" + Character.MAX_VALUE );
System.out.println(result); //prints [Erich]
Поскольку параметр to
для subset(from, to)
является эксклюзивным, вам нужно что-то, что будет явно лучше. В моем примере я просто добавил Character.MAX_VALUE
, но вы можете получить лучшую верхнюю границу. Обратите внимание, что это зависит от вашего компаратора, например, как он обрабатывает различия в регистре и т. д.
Если вы хотите фильтровать с использованием подстановочных знаков, как и все тексты , содержащие текст (например, f
будет переводиться в *f*
), вам придется все равно повторить и проверить все записи. В этом случае вы не получите никакого преимущества, используя отсортированный набор.
Редактировать: обновил пример с вашими данными (добавив и меня :)).