issue with java 8 collectors Type mismatch: cannot convert from List<Object> to List<String>
Well I have also faced similar kind of error Type mismatch: cannot convert from Set<Object> to Set<String>
recently. Below is the code 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);
}
Here is the screen shot for reference-:
Now let me explain why was I getting this error? In my case code was displaying compile time error because there was mismatch in compiler version in project properties. I had selected 1.7 but it should be 1.8 since this feature has been added in 1.8.
So please make a note of below points-:
- Appropriate JDK has been selected in Java Build Path. e.g. JDK 1.8 in this case.
- Appropriate compiler version must be selected under Java Compiler (as displayed in above screenshot) in project properties. e.g. 1.8
I hope this would help you.
I checked the following complete example:
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;
}
}
It compiles perfectly with javac 8u25, 8u40, 8u60, 8u71 (note that 8u71 is the security update of 8u66, thus essentially the same). Try to clean your project and rebuild from scratch.