2016-01-25 23 views
6

Tôi đã có mã làm việc với phiên bản cũ hơn java 8 mà tôi đang sử dụng để lấy giá trị duy nhất từ ​​danh sách nhưng kể từ khi tôi nâng cấp lên JDK 66 một lỗivấn đề với java 8 collectors Loại không phù hợp: không thể chuyển đổi từ Danh sách <Object> sang Danh sách <String>

Loại không phù hợp: không thể chuyển đổi từ 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()); 

đâu res là resultset tôi đang nhận được từ cơ sở dữ liệu, không chắc chắn những gì là sai bất kỳ ý tưởng?

+0

nên .collect (Collectors.toList()) cung cấp cho bạn một danh sách nhưng bạn muốn nó được Danh sách lordkain

+0

có, nó đã làm việc với JDK 51 nhưng sau khi nâng cấp java lỗi ném nó – Nomad

+0

'Danh sách instListF = instList Bản đồ. (e -> (String) e) .collect (Collectors.toList()); ' – Satya

Trả lời

3

Tôi cũng đã đối mặt với loại lỗi tương tự Type mismatch: cannot convert from Set<Object> to Set<String> gần đây. Dưới đây là mã snippet-:

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); 
} 

Dưới đây là ảnh chụp màn hình cho reference-: enter image description here

Bây giờ hãy để tôi giải thích tại sao tôi nhận được lỗi này? Trong trường hợp mã của tôi đã hiển thị lỗi thời gian biên dịch vì không khớp trong phiên bản trình biên dịch trong thuộc tính dự án. Tôi đã chọn 1.7 nhưng phải là 1.8 vì tính năng này đã được thêm vào trong 1.8.

enter image description here

Vì vậy, xin vui lòng ghi chú dưới points-:

  1. phù hợp JDK đã được chọn trong Java Build Path. ví dụ. JDK 1.8 trong trường hợp này.
  2. phù hợp biên dịch phiên bản phải được lựa chọn dưới Java Compiler (như được hiển thị trong ảnh chụp màn hình trên) vào bất động sản dự án. ví dụ. 1.8

Tôi hy vọng điều này sẽ giúp ích cho bạn.

4

Tôi đã kiểm tra ví dụ hoàn chỉnh sau:

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; 
    } 
} 

Nó biên dịch một cách hoàn hảo với 8u25 javac, 8u40, 8u60, 8u71 (lưu ý 8u71 đó là cập nhật bảo mật của 8u66, do đó về cơ bản giống nhau). Hãy cố gắng làm sạch dự án của bạn và xây dựng lại từ đầu.

Các vấn đề liên quan