我正在测试一个更复杂的任务,在那里我可能会重复我想避免使用HashSet的元素。
我编写了以下使用getAllEmpresas()的代码,Empresa或Organization是一个更复杂的结构,DAOJson正在检索,但我只对这些组织的名称感兴趣...
public class TestListaDeNombresDeEmpresas {
RepositorioDeEmpresas repo ;
HashSet<String> nombresDeEmpresas ;
List<Empresa> empresas ;
public TestListaDeNombresDeEmpresas () throws IOException
{
DAOJsonEmpresa dao = new DAOJsonEmpresa() ;
repo = RepositorioDeEmpresas.getInstance(dao) ;
empresas = repo.getAllEmpresas() ;
nombresDeEmpresas = new HashSet<String>();
fillHashSet();
}
public static void main (String [] args) throws IOException
{
TestListaDeNombresDeEmpresas test = new TestListaDeNombresDeEmpresas() ;
System.out.println("Imprimiendo lista de empresas");
test.imprimirListEmpresas();
test.fillHashSet();
System.out.println();
test.hashSetContainsFirstElement();
System.out.println("imprimiendo hash...");
test.imprimirHashNombresEmpresas();
}
public void fillHashSet() {
List<String> nombresDeEmpresasAux = empresas.stream()
.map(e -> e.getName()).collect(Collectors.toList()) ;
nombresDeEmpresasAux.forEach(e -> nombresDeEmpresas.add(e));
}
public void hashSetContainsFirstElement()
{
List<String> nombresDeEmpresasAux = empresas.stream()
.map(e -> e.getName()).collect(Collectors.toList()) ;
System.out.printf("Contiene el hash de empresas el nombre %s? : %s\n",
nombresDeEmpresasAux.get(0),nombresDeEmpresas
.contains( nombresDeEmpresasAux.indexOf(0) ) );
System.out.println();
}
public void imprimirHashNombresEmpresas()
{
nombresDeEmpresas.forEach(System.out::println);
}
public void imprimirListEmpresas()
{
empresas.forEach(e -> System.out.println( e.getName() ) ) ;
}
}
当我跑步时
public void hashSetContainsFirstElement()
{
List<String> nombresDeEmpresasAux = empresas.stream()
.map(e -> e.getName()).collect(Collectors.toList()) ;
System.out.printf("Contiene el hash de empresas el nombre %s? : %s\n",
nombresDeEmpresasAux.get(0),nombresDeEmpresas
.contains( nombresDeEmpresasAux.indexOf(0) ) );
}
它打印为false,这没有任何意义,实际上程序的输出是......
Imprimiendo lista de empresas
Nike
Facebook
Dolce&Gabbana
Twitter
Snapchat
YouTube
Contiene el hash de empresas el nombre Nike? : false
imprimiendo hash...
Nike
Dolce&Gabbana
Twitter
Facebook
YouTube
Snapchat
这清楚地表明HashSet nombresDeEmpresas,实际上包含名称'Nike'...为什么会发生这个错误,我该如何解决?
答案 0 :(得分:1)
在你的行中:
System.out.printf("Contiene el hash de empresas el nombre %s? : %s\n",
nombresDeEmpresasAux.get(0),nombresDeEmpresas
.contains( nombresDeEmpresasAux.indexOf(0) ) );
您要使用nombresDeEmpresasAux.get(0)
代替nombresDeEmpresasAux.indexOf(0)
吗?