web-dev-qa-db-fra.com

problème avec Java 8 collectors Non-correspondance de type: impossible de convertir de List <Object> en List <String>

j'avais du code de travail avec une version antérieure de Java 8 que j'utilisais pour obtenir des valeurs uniques de la liste mais depuis que je suis passé au JDK 66, cela me donne une erreur

Non-concordance de type: impossible de convertir à partir de List<Object> à List<String>

List<String> instList = new ArrayList<String>();

while (res.next()) {
    instList.add(res.getString("INST").toString());
}           

List<String> instListF = instList.stream().distinct().collect(Collectors.toList());

res est l'ensemble de résultats que je reçois de la base de données, vous ne savez pas ce qui ne va pas une idée?

15
Nomad

Eh bien, j'ai également rencontré le même type d'erreur Type mismatch: cannot convert from Set<Object> to Set<String> récemment. Voici l'extrait de code:

public static void main(String[] args) {
    String[] arr = new String[]{"i", "came", "i", "saw", "i", "left"};

    Set<String> set = Arrays.asList(arr).stream().collect(Collectors.toSet());

    System.out.println(set.size() + "  distinct words: " + set);
}

Voici la capture d'écran pour référence-: enter image description here

Maintenant, laissez-moi vous expliquer pourquoi j'obtenais cette erreur? Dans mon cas, le code affichait une erreur de compilation car il y avait un décalage dans la version du compilateur dans les propriétés du projet. J'avais sélectionné 1,7 mais il devrait l'être 1,8 puisque cette fonctionnalité a été ajouté dans 1.8 .

enter image description here

Veuillez donc noter les points ci-dessous:

  1. Le JDK approprié a été sélectionné dans Chemin de génération Java . par exemple. JDK 1.8 dans ce cas.
  2. La version appropriée du compilateur doit être sélectionnée sous Compilateur Java ( comme indiqué dans la capture d'écran ci-dessus) dans les propriétés du projet. par exemple. 1,8

J'espère que cela vous aidera.

8
Ashish Kumar

J'ai vérifié l'exemple complet suivant:

import Java.sql.ResultSet;
import Java.sql.SQLException;
import Java.util.stream.Collectors;
import Java.util.List;
import Java.util.ArrayList;

public class Test { 
    public List<String> test(ResultSet res) throws SQLException {
        List<String> instList = new ArrayList<String>();

        while (res.next()) {
            instList.add(res.getString("INST").toString());
        }           

        List<String> instListF = instList.stream().distinct().collect(Collectors.toList());
        return instListF;
    }
}

Il se compile parfaitement avec javac 8u25, 8u40, 8u60, 8u71 (notez que 8u71 est la mise à jour de sécurité de 8u66, donc essentiellement la même). Essayez de nettoyer votre projet et de le reconstruire à partir de zéro.

4
Tagir Valeev

Après avoir vérifié mon niveau de compilation (selon Ashish ci-dessus), je me suis rendu compte que je n'avais aucun type de données sur List ou Set. Une fois que j'ai ajouté cela a fonctionné.

List<Integer> number = Arrays.asList(2, 3, 4, 5, 3);
Set<Integer> square = number.stream()
     .map(x -> x * x)
     .collect(Collectors.toSet());
1
Karidrgn