У меня есть следующий код, который выполняется так, как я намереваюсь:
import java.util.*;
import java.util.stream.Collectors;
public class HelloWorld{
public static void main(String []args){
HelloWorld.TreeNode rootNode = new HelloWorld().new TreeNode<Integer>(4);
List<Integer> traversal = rootNode.inorderTraversal();
// Prints 4
System.out.println(
String.join(",",
traversal
.stream()
.map(Object::toString)
.collect(Collectors.toList())
)
);
}
class TreeNode<K extends Comparable<K>> {
TreeNode<K> left;
TreeNode<K> right;
K val;
TreeNode(K val, TreeNode<K> left, TreeNode<K> right) {
this.val = val;
this.left = left;
this.right = right;
}
TreeNode(K val) {
this(val, null, null);
}
List<K> inorderTraversal() {
List<K> list = new ArrayList<>();
list.add(this.val);
return list;
}
}
}
Однако, если я заменяю закомментированную строку на
System.out.println(
String.join(",",
rootNode.inorderTraversal()
.stream()
.map(Object::toString)
.collect(Collectors.toList())
)
);
, я получаю следующую ошибку:
HelloWorld.java:14: error: no suitable method found for join(String,Object)
String.join(",",
^
method String.join(CharSequence,CharSequence...) is not applicable
(varargs mismatch; Object cannot be converted to CharSequence)
method String.join(CharSequence,Iterable<? extends CharSequence>) is not
applicable
(argument mismatch; Object cannot be converted to Iterable<? extends
CharSequence>)
Note: HelloWorld.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error
Я видел эту очень похожую проблему ( Почему эта потоковая операция java 8 оценивается как Object вместо List или просто List? ), но я не вижу, как мое решениене обходит проблему, возникшую у пользователя, потому что rootNode.inorderTraversal()
возвращает List<Integer>
вместо List
.
Заранее благодарим за любую помощь!