Retornar uma lista

Boa tarde, tenho um método que le os registros do windows para fazer a verificação dos softwares instalados no pc.poém eu preciso que o seu retorno seja uma lista. Alguém pode me ajudar?

public static List retornar() {

       List<String> lista = new ArrayList<>();
   
      RegistryKey.initialize("C:\\Programa17\\nova\\jRegistryKey.dll");
    RegistryKey key = new RegistryKey(RootKey.HKLM, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall");
    for (Iterator<RegistryKey> subkeys = key.subkeys(); subkeys.hasNext();) {
        RegistryKey subkey = subkeys.next();
       if(subkey.hasValue("DisplayName")){
    
   

            
String nomePrograma = subkey.getValue("DisplayName").toString().replace("DisplayName:REG_SZ:", "");
     
     
      
     }
     
    System.out.println(lista);

  
      }
        return lista;
 }

tenta desta forma :

 public static List retornar() {

       List<String> lista = new ArrayList<>();
       String nomePrograma =  "";

      RegistryKey.initialize("C:\\Programa17\\nova\\jRegistryKey.dll");
    RegistryKey key = new RegistryKey(RootKey.HKLM, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall");
    for (Iterator<RegistryKey> subkeys = key.subkeys(); subkeys.hasNext();) {
        RegistryKey subkey = subkeys.next();
       if(subkey.hasValue("DisplayName")){
       nomePrograma = subkey.getValue("DisplayName").toString().replace("DisplayName:REG_SZ:", "");
     }
    lista.add(nomePrograma);
      }
        return lista;
 }

Então, eu já tentei desta forma, mas ai ele so retorna o primeiro software da lista num loop infinito.

sem o codigo pra testar as vezes fica ruim , mas tenta assim ->

for (Iterator<RegistryKey> subkeys = key.subkeys(); subkeys.hasNext();) {
        RegistryKey subkey = subkeys.next();
       if(subkey.hasValue("DisplayName")){
      lista.add(subkey.getValue("DisplayName").toString().replace("DisplayName:REG_SZ:", ""));
     }
   }
        return lista;

Continua o mesmo problema, eu acho que o problema na hora de interar la no for… só não estou conseguindo enxergar como consertar…

Sem o código fica complicado mesmo.

Faça o seguinte: substitui o List pelo Set.

public static List retornar() {

   Set<String> set = new HashSet<String>();
   List<String> lista = new ArrayList<String>();
   String nomePrograma =  "";

  RegistryKey.initialize("C:\\Programa17\\nova\\jRegistryKey.dll");
RegistryKey key = new RegistryKey(RootKey.HKLM, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall");
for (Iterator<RegistryKey> subkeys = key.subkeys(); subkeys.hasNext();) {
    RegistryKey subkey = subkeys.next();
   if(subkey.hasValue("DisplayName")){
    set.add(subkey.getValue("DisplayName").toString().replace("DisplayName:REG_SZ:", ""));
  }
  if(!set.isEmpty()){
     lista.addAll(set);
     //ordernar, se quiser
  }
  return lista;
}

Testa para ver se pelo menos puxa a informação que você está querendo.

EDIT 1:
Na verdade, você teria que rodar um for para cada subkey.

Logo teria que ser algo assim

public static List retornar() {

Set<String> set = new HashSet<String>();
List<String> lista = new ArrayList<String>();
String nomePrograma =  "";

RegistryKey.initialize("C:\\Programa17\\nova\\jRegistryKey.dll");
RegistryKey key = new RegistryKey(RootKey.HKLM, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall");
for (Iterator<RegistryKey> subkeys = key.subkeys(); subkeys.hasNext();) {
     RegistryKey subkey = subkeys.next();
     for (Iterator<RegistryKey> secondSubkeys = subkey.subkeys(); secondSubkeys.hasNext();) {
           RegistryKey secondSubkey = secondSubkeys.next();
           if(secondSubkey.hasValue("DisplayName")){
              set.add(secondSubkey.getValue("DisplayName").toString().replace("DisplayName:REG_SZ:", ""));
           }
      }
}
if(!set.isEmpty()){
    lista.addAll(set);
    //ordernar, se quiser
}
return lista;
}

Oi, td bem?

Ainda não está funcionando… Poxa obrigado mesmo pela ajuda de vcs.
Eu não tenho muita coisa no codigo ainda… tanto qu eu estava testando p ver na tela mesmo se está dando certo ou não… desculpem é que sou novato ainda…

Mas enfim não funciona ainda… Vcs sabem alguma forma de trazer essas informações outra forma?