私はリストから一意の値を取得するために使用していた以前のバージョンのJava 8
タイプの不一致: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は、データベースから取得している結果セットですが、何が間違っているのか分かりませんか?
よく似た種類のエラーに直面しましたType mismatch: cannot convert from Set<Object> to Set<String>
最近。以下はコードスニペットです。
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);
}
次に、このエラーが発生した理由を説明しましょう。私の場合、プロジェクトプロパティのcompiler versionに不一致があったため、コードにコンパイル時エラーが表示されていました。私は1.7を選択していましたが、この機能は1.8なので1.8に追加されました。
以下の点をメモしてください-:
これがお役に立てば幸いです。
次の完全な例を確認しました。
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;
}
}
Javac 8u25、8u40、8u60、8u71で完全にコンパイルされます(8u71は8u66のセキュリティ更新プログラムであるため、本質的に同じです)。プロジェクトをきれいにして、ゼロから再構築してみてください。
コンパイラレベル(上記のAshishによる)を確認した後、ListまたはSetのいずれにもデータ型がないことに気付きました。一度追加するとうまくいきました。
List<Integer> number = Arrays.asList(2, 3, 4, 5, 3);
Set<Integer> square = number.stream()
.map(x -> x * x)
.collect(Collectors.toSet());