2017-01-17 9 views
-2

Я должен написать код, который можно удалить все слова из SortedSet начинается с К.Как подмножестве из SortedSet <String>

import java.util.*; 

public class Deleter { 

    public static void deleteKWords(SortedSet<String> set) { 
     set.subSet("K", ""); 
} 
    } 

} 

Я слышал, что с подмножеством может просто решить, но я не мог.

+1

Прочтите javadoc ['subSet()'] (https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html#subSet-EE-) и ['clear () '] (https://docs.oracle.com/javase/8/docs/api/java/util/Set.html#clear--), затем объедините их:' set.subSet («K», «L ") .clear()' – Andreas

+1

http://stackoverflow.com/questions/1110404/remove-elements-from-a-hashset-while-iterating –

+0

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что [вопросы, задаваемые для справки о домашнем задании должен содержать краткое изложение выполненной до сих пор работы для решения проблемы и описание трудностей, связанных с ее решением] (http://stackoverflow.com/help/on-topic). – Andreas

ответ

1

Вы можете просто сделать это путем объединения подмножестве() и RemoveAll() методы:

public static void deleteKWords(SortedSet<String> set) { 
    Set s = new TreeSet<>(set.subSet("K", "O")); 
    set.removeAll(s); 
} 
1

Вы можете achive, что вы хотите с помощью Java 8 потока:

public static SortedSet<String> deleteKWords(SortedSet<String> set) { 
    return new TreeSet<>(set 
      .stream() 
      .filter((s) -> !s.startsWith("K")) 
      .collect(Collectors.toSet())); 

} 

Edit: Возможно, это будет более эффективным, чтобы не создавать новый объект каждый раз, и просто изменить один вы отправляете к методу:

public static SortedSet<String> deleteKWords(SortedSet<String> set) { 
    set.removeAll(set 
      .stream() 
      .filter((s) -> s.startsWith("K")) 
      .collect(Collectors.toList())); 
    return set; 

}