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());
Où 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?
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-:
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 .
Veuillez donc noter les points ci-dessous:
J'espère que cela vous aidera.
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.
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());