HashSet等于无法正常工作

时间:2017-10-03 04:32:11

标签: java hashset

我正在测试一个更复杂的任务,在那里我可能会重复我想避免使用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'...为什么会发生这个错误,我该如何解决?

1 个答案:

答案 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)吗?