首页 > 解决方案 > 转换列表列出演员表异常

问题描述

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

 List<Object[]> params  = ...

我想将此列表转换为字符串列表

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

标签: javajava-streamclasscastexception

解决方案


  • 流式传输数组
  • 将数组展平为对象流。
  • 过滤掉非字符串。
  • 通过映射剩余对象转换为字符串
  • 收集到列表中
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]

推荐阅读