将 List<Object[]> 转换为 list<String> 转换异常

Convert List<Object[]> to list<String> Cast exception

我有一个包含对象(字符串)数组的列表:

 List<Object[]> params  = ...

我想将这个列表转换为字符串列表List

  List<Object> results = params.stream()
                            .flatMap(arr -> Arrays.stream(arr))
                            .collect(Collectors.toList());

然后我想做类似的事情:

results.forEach(System.out::println);

我得到这个异常:

java.lang.ClassCastException: class java.lang.String cannot be cast to class [Ljava.lang.Object; (java.lang.String and [Ljava.lang.Object; are in module java.base of loader 'bootstrap')

这是我创建参数的方式:

 Query query = entityManager.createNativeQuery(sql);
 List<Object[]> params = query.getResultList();;
  • 流式传输数组
  • 将数组展平为对象流。
  • 过滤掉非字符串。
  • 通过将剩余对象映射到字符串
  • 收集到列表中
List<Object> params = List.of(1, 2,
                   "hello",
                   "computer",  new Object(), 4.32,
                   new Object[]{1,2});

List<String> strings = params.stream()
        .filter(ob -> ob instanceof String)
        .map(ob -> (String) ob)
        .collect(Collectors.toList(), "java");

System.out.println(strings);

版画

[hello, computer, java]
import java.util.*;
import java.util.stream.Stream;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class HelloWorld{

     public static void main(String []args){
         
             Object[] a = { "A", "B" };
            Object[] b = { "C", "D" };
            Object[] c = { "E", "F" };
        
        List<Object[]> params  = new ArrayList();
        params.add(a);
        params.add(b);
        params.add(c);
       
       
       List<String> str = params.stream()
      .flatMap(Arrays::stream).map(value -> (String) value)
        .collect(Collectors.toList());
      
      for(String s:str){
          System.out.println(s);
          
      }
     }
     
     
}