web-dev-qa-db-ja.com

Java 8コレクタータイプの不一致の問題:List <Object>からList <String>に変換できません

私はリストから一意の値を取得するために使用していた以前のバージョンの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は、データベースから取得している結果セットですが、何が間違っているのか分かりませんか?

12
Nomad

よく似た種類のエラーに直面しました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);
}

参照用のスクリーンショットは次のとおりです: enter image description here

次に、このエラーが発生した理由を説明しましょう。私の場合、プロジェクトプロパティのcompiler versionに不一致があったため、コードにコンパイル時エラーが表示されていました。私は1.7を選択していましたが、この機能は1.8なので1.8に追加されました。

enter image description here

以下の点をメモしてください-:

  1. Java Build Pathで適切なJDKが選択されています。例えばJDK 1.8この場合。
  2. 適切なコンパイラバージョンは、Java Compilerプロジェクトのプロパティの上のスクリーンショット)に表示されています。例えば1.8

これがお役に立てば幸いです。

8
Ashish Kumar

次の完全な例を確認しました。

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のセキュリティ更新プログラムであるため、本質的に同じです)。プロジェクトをきれいにして、ゼロから再構築してみてください。

4
Tagir Valeev

コンパイラレベル(上記の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());
0
Karidrgn