Bom dia!
Pessoal estou precisando de umas dicas para finalizar um trabalho.
Preciso processar centenas de arquivos contendo vários textos, no final separar gerar um CSV contendo todas as palavras e as repetições.
Isso já está sendo feito, e crio um CSV seguindo o modelo abaixo.
javali;5
uniao;2
leitao;6
porcos;3
universo;1
pessoa;6
Agora tenho de utilizar um TreeMap para realizar uma busca nesse CSV, onde a busca possa ser feita da seguinte maneira:
Como parametro de entrada passo: uni*
Como resposta espero:
A parte da criação/leitura/interpretação do CSV já está funcionando belezinha, só não sei como inserir esses registros na TreeMap e realizar a busca.
Alguém pode me dar uma luz?
Obrigado e aguardo respostas.
Use http://docs.oracle.com/javase/6/docs/api/java/util/SortedMap.html#subMap(K,%20K).
Um exemplo para uni*:
import java.util.*;
class TesteSubMap {
public static void main (String[] args) {
SortedMap<String, String> map = new TreeMap<String, String>();
map.put ("universo", "em desencanto");
map.put ("uniao", "o melhor acucar");
map.put ("planeta", "Marte");
map.put ("resistencia", "eh inutil");
for (SortedMap.Entry<String, String> entry : map.subMap ("uni", "uni" + "\uFFFF").entrySet()) {
System.out.println (entry.getKey() + "=" + entry.getValue());
}
}
}
Nó, muito mais simples que eu imaginava 
Muito obrigado, vai atender perfeitamente para o que eu preciso.
Só tenho mais uma dúvida. O que seria “\uFFFF” ?
subMap tem 2 parâmetros: o valor inicial e o final.
O inicial é incluído no submapa, e o final é excluído do submapa.
Vou dar um exemplo com números: digamos que você tenha o conjunto dos números de 1 até 100 e quer mostrar os números de 50 até 59. Se for usar subMap, você tem de passar (50, 60), não 50, 59.
O uso de “\uFFFF” é o seguinte: esse caracter é o último caracter Unicode possível, portanto com certeza qualquer string que comece por “uni” vai ser incluída, exceto uma que comece por uni e que tenha essa letra “\uFFFF”.
Óh sim, compreendi 
No caso se precisa-se pegar tudo que termina com “uni” eu usaria o:
for (Entry<String, Integer> entry : arvore.subMap ("\u0000" , "uni").entrySet()) {
System.out.println (entry.getKey() + "=" + entry.getValue());
}
Seria isso para o caso reverso?
Para resolver o problema do: * fiz da seguinte maneira
for (Entry<String, Integer> entry : arvore.subMap("\u0000","\uFFFF" + busca).entrySet()) {
if (entry.getKey().indexOf(busca) != -1) {
System.out.println(entry.getKey() + "=" + entry.getValue());
}
}
@entanglement
Obrigado por ajudar 
Completando o exemplo para os casos “termina com ___” e “contém ___”.
import java.util.*;
class TesteSubMap {
private static String reverse (final String original) {
return new StringBuilder (original).reverse().toString();
}
public static void main (String[] args) {
// Tudo que começa por "uni"
SortedMap<String, String> map = new TreeMap<String, String>();
map.put ("universo", "em desencanto");
map.put ("uniao", "o melhor acucar");
map.put ("planeta", "Marte");
map.put ("resistencia", "eh inutil");
System.out.println ("-- Tudo que começa por 'uni' --");
for (SortedMap.Entry<String, String> entry : map.subMap ("uni", "uni" + "\uFFFF").entrySet()) {
System.out.println (entry.getKey() + "=" + entry.getValue());
}
// Tudo que termina com "ado"
SortedMap<String, String> reverseMap = new TreeMap<String, String>();
reverseMap.put (reverse ("deputado"), "Joselito Araujo");
reverseMap.put (reverse ("Encantado"), "Rio Grande do Sul");
reverseMap.put (reverse ("expiada"), "pagou por todas as suas culpas");
reverseMap.put (reverse ("Encantado"), "Rio Grande do Sul");
reverseMap.put (reverse ("deployed"), "also known as distributed");
System.out.println ("-- Tudo que termina em 'ado' - forma 1 --");
for (SortedMap.Entry<String, String> entry : reverseMap.subMap (reverse ("ado"), reverse ("ado" + "\uFFFF")).entrySet()) {
System.out.println (reverse (entry.getKey()) + "=" + entry.getValue());
}
// Outra maneira
reverseMap = new TreeMap<String, String>(new Comparator<String> () {
public int compare (String s1, String s2) {
return reverse(s1).compareTo(reverse(s2));
}
});
reverseMap.put ("deputado", "Joselito Araujo");
reverseMap.put ("Encantado", "Rio Grande do Sul");
reverseMap.put ("expiada", "pagou por todas as suas culpas");
reverseMap.put ("Encantado", "Rio Grande do Sul");
reverseMap.put ("deployed", "also known as distributed");
System.out.println ("-- Tudo que termina em 'ado' - forma 2 --");
for (SortedMap.Entry<String, String> entry : reverseMap.subMap ("ado", "ado" + "\uFFFF").entrySet()) {
System.out.println (entry.getKey() + "=" + entry.getValue());
}
// Tudo que tem "men" no meio
// Neste caso, tanto faz se é um TreeMap, um HashMap etc., já que você vai ter de varrer o mapa completo.
// Supondo que seja um map:
Map<String, String> mapa = new HashMap<String, String>();
mapa.put ("realmente", "finalmente");
mapa.put ("amenidade", "docilidade");
mapa.put ("recuperação", "superação");
mapa.put ("bimensal", "assinatura");
System.out.println ("-- Tudo que contém 'men' --");
for (Map.Entry<String, String> entry : mapa.entrySet()) {
if (entry.getKey().contains ("men"))
System.out.println (entry.getKey() + "=" + entry.getValue());
}
}
}