Санаев Asked:2020-12-02 04:47:15 +0000 UTC2020-12-02 04:47:15 +0000 UTC 2020-12-02 04:47:15 +0000 UTC 使用 Java Stream API 将列表转换为对象 772 我有一个具有以下值的 ArrayList: {"*","12","24","52","*","35","3","*","3"} 我需要转换此工作表以获得这样的对象数组(分隔符 *): {{"12","24","52"},{"35","3"},{"3"}} 我不是在流上写这个实现的。 告诉我,是否有可能在流上做到这一点? java 1 个回答 Voted Best Answer Alex Chermenin 2020-12-02T05:04:11Z2020-12-02T05:04:11Z 它可以通过以下两个阶段大致按以下方式实现 - 首先,将源流解析为列表(如果对象表示列表列表,则停在那里),然后将列表转换为数组: List<String> list = Arrays.asList("*", "12", "24", "52", "*", "35", "3", "*", "3"); List<List<String>> lists = list.stream().collect( ArrayList::new, (l, s) -> { if (s.equals("*")) l.add(new ArrayList<>()); else l.get(l.size() - 1).add(s); }, ArrayList::addAll ); String[][] strings = lists.stream() .map(l -> l.toArray(new String[l.size()])) .toArray(String[][]::new); System.out.println(Arrays.deepToString(strings)); // out: [[12, 24, 52], [35, 3], [3]] 但为什么?
它可以通过以下两个阶段大致按以下方式实现 - 首先,将源流解析为列表(如果对象表示列表列表,则停在那里),然后将列表转换为数组:
但为什么?