当前位置: 首页 > 知识库问答 >
问题:

我可以在一条流中进行拆分和过滤吗?

淳于涛
2023-03-14

我正在努力做到以下几点。。。。

我有以下模式的字符串列表:

John,Peter,Carl
Rose,Joanne,Natalie

此刻我正在逐行阅读并输出一条流。。。

这样地:

 Files.lines(myfile).toURI()))

这将返回一个流。

我知道我可以把它们收集到一个列表中,但是我想知道在这个流中我是否可以分裂并做更多的逻辑?

我尝试分割每一行并过滤,以防三个预期字段中的任何一个为空,这可能吗?

目前我有这样的“旧方式”:

List<TripleNames> validValues = new ArrayList();
for(String value:values) { //values represent each line comma separated
   final String[] names = line.split(",");
   if (StringUtils.isNotBlank(names[0]) && StringUtils.isNotBlank(names[1]).... {
    validValues.add(new TripleNames(names[0], names[1], names[2]);
   } 
}

有什么想法吗?

共有2个答案

元胡媚
2023-03-14

如果你想要一个简单的方法来检查所有拆分的项目,你可以使用:

Arrays.stream(names).allMatch(StringUtils::isNotBlank)

而不是在某个条件下单独检查每个项目。

以下是完整的示例:

List<String> validValues = values.stream()
    .map(line -> line.split(","))
    .filter(names -> Arrays.stream(names).allMatch(StringUtils::isNotBlank))
    .map(names -> new TripleNames(names[0], names[1], names[2]))
    .collect(Collectors.toList());

您也可以使用. map(String::trim). allMatch()之前,以在所有名称的开头和结尾处剪切空白,如果这有帮助的话。

陶英纵
2023-03-14

在收集到以下列表之前,您可能正在寻找mapping:

List<TripleNames> validValues = values.stream()
        .map(line -> line.split(","))
        .filter(names -> StringUtils.isNotBlank(names[0]) && StringUtils.isNotBlank(names[1]))
        .map(names -> new TripleNames(names[0], names[1], names[2]))
        .collect(Collectors.toList());
 类似资料:
  • 除了这个用例,流还有很多问题 我有一个巨大的对象流

  • 面试题 为什么要进行系统拆分?如何进行系统拆分?拆分后不用 dubbo 可以吗? 面试官心理分析 从这个问题开始就进行分布式系统环节了,现在出去面试分布式都成标配了,没有哪个公司不问问你分布式的事儿。你要是不会分布式的东西,简直这简历没法看,没人会让你去面试。 其实为啥会这样呢?这就是因为整个大行业技术发展的原因。 早些年,印象中在 2010 年初的时候,整个 IT 行业,很少有人谈分布式,更不用

  • 我需要基于另一个流过滤一个流,并获取所有匹配条目的计数。 我已经尝试了以下和各种其他组合,但它没有按预期工作。 这个想法是: < li >对于从0到256的每个数字(流1) < li >查看该号码是否出现在另一个列表中(流2 ),如果出现的话 < li >计算出现次数除以流2中的元素总数(18)。 < li >如果没有出现,请收集0。 这基本上是根据流 2 中的出现次数查找流 1 中数字的频率。

  • 我的模式实现受到了mongo官方网站上这篇教程的影响 这基本上是为时间序列数据设计的模式,我将每个设备每小时的数据存储在单个文档中的数组中。我创建字段组合发送数据和时间的设备id。例如,如果id为的设备在发送数据,则我的 字段将变为

  • 我想翻译方法做完全相同的,但使用流和过滤,如果必要的话 我正在学习使用流,所以我不知道如何实现这一点。到目前为止,我已经做了以下工作: 很明显,我得到了一个字符串列表,但是我不知道如何将它减少到只有一个元素(该列表没有超过一个元素),如果没有找到元素,就会得到null。 此外,我得到了,我应该返回相应的TestState,而不是它的。

  • 与之间的差异: > 它们可能有不同的特点: 这里讨论的似乎是另一个毫无意义的流拆分器特性策略(并行计算似乎更好):深入理解Java8和Java9中的拆分器特性 在本例中,从禁用拆分功能的顺序流创建了一个拆分器(返回null)。当以后需要转换回一个流时,该流不会从并行处理中受益。一种耻辱。 最大的问题是:作为解决办法,在调用之前总是将流转换为并行流会有什么主要影响?