当前位置: 首页 > 面试题库 >

使用Stream API根据条件将列表拆分为子列表

闻人河
2023-03-14
问题内容

我有一个具体的问题。有一些类似的问题,但是要么是Python的问题,要么是Java的问题,或者即使问题听起来很相似,要求也有所不同。

我有一个值列表。

List1 = {10, -2, 23, 5, -11, 287, 5, -99}

归根结底,我想根据列表的值拆分列表。我的意思是,如果该值大于零,它将保留在原始列表中,并且负值列表中的相应索引将被设置为零。如果该值小于零,它将转到负值列表,原始列表中的负值将替换为零。

结果列表应该像这样;

List1 = {10, 0, 23, 5, 0, 287, 5, 0}
List2 = {0, -2, 0, 0, -11, 0, 0, -99}

有没有办法用Java中的Stream api解决此问题?


问题答案:

如果要在单个Stream操作中执行此操作,则需要一个自定义收集器:

List<Integer> list = Arrays.asList(10, -2, 23, 5, -11, 287, 5, -99);

List<List<Integer>> result = list.stream().collect(
    () -> Arrays.asList(new ArrayList<>(), new ArrayList<>()),
    (l,i) -> { l.get(0).add(Math.max(0, i)); l.get(1).add(Math.min(0, i)); },
    (a,b) -> { a.get(0).addAll(b.get(0)); a.get(1).addAll(b.get(1)); });

System.out.println(result.get(0));
System.out.println(result.get(1));


 类似资料:
  • 我有一个具体的问题。也有一些类似的问题,但这些问题要么与Python有关,而不是与Java有关,要么即使问题听起来类似,需求也不同。 我有一份价值观清单。 最后,我想根据列表的值对列表进行拆分。我的意思是,如果值大于零,它将保留在原始列表中,负值列表中的相应索引将设置为零。如果该值小于零,它将转到负值列表,原始列表中的负值将替换为零。 结果列表应该是这样的; 有没有办法解决这个流api在Java?

  • 问题内容: 从美学角度和性能角度来看,基于条件将项目列表拆分为多个列表的最佳方法是什么?相当于: 有没有更优雅的方法可以做到这一点? 更新:这是实际的用例,以更好地解释我正在尝试做的事情: 问题答案: 有没有更优雅的方法可以做到这一点? 该代码完全可读,而且非常清晰! 再次,这很好! 使用集合可能会稍微改善性能,但这是微不足道的差异,而且我发现列表理解要容易阅读得多,并且你不必担心顺序被弄乱了,重

  • 问题内容: 我有这个清单(): 我想要这样的东西: 换句话说,我想使用值作为分隔符将列表拆分为子列表,以获得列表列表()。我正在寻找Java 8解决方案。我已经尝试过,但是我不确定这是我要找的东西。谢谢! 问题答案: 我目前想出的唯一解决方案是实现自己的自定义收集器。 在阅读解决方案之前,我想添加一些有关此的注释。我将这个问题更多地当作编程练习,我不确定是否可以使用并行流来完成。 因此,您必须意识

  • 如何将这列列表拆分为两列? 期望的结果:

  • 问题:如何将列表拆分为两个子列表,其中元素由元素中的选项卡分隔? 上下文:我想读取一个由制表符分隔的文件到Pandas DataFrame中。这些文件看起来像: 列1\t 123 列2\t 列3\t文本 这意味着每行有一列,后面跟着一个选项卡,然后是该列的一个值(有时没有值)。 我的想法是读取文件并将每行保存为列表的元素,然后将列表分成两个,将选项卡前的第一部分作为一个列表,选项卡后的第二部分作为

  • 我有一个数据表(mtcars)。它有名称为:mpg cyl disp hp drat wt qsec vs的列,我想将每一列与vs进行比较(第1列vs第8列,第2列vs第8列等),并从1:7开始将每一列颜色为红色(如果元素小于第8列中的元素)、黄色(如果元素相等)或绿色(如果元素较大)。 我已经使用了KableExtra包,并使用了下面的代码: 也尝试了condformat和tableHTML..