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

寻找从列表中移除每个项目的一部分的有效方法

高胜
2023-03-14

我有字符串项目的列表,我正在尝试删除每个项目中的字符串部分,并用它创建新的列表。我可以使用下面的代码来实现它,但是我觉得会有更好的方法使用流API来处理这个问题。请让我知道是否有更好的方法可以解决这个问题

请参见下面的例子(为解释而简化)

    List<String> list = new ArrayList<String>();
    list.add("Value1.1,Value1.2,Value1.3,Value1.4,Value1.5,Value1.6");
    list.add("Value2.1,Value2.2,Value2.3,Value2.4,Value2.5,Vaule2.6");

    List<String> newList = list.stream().map(i -> {
            List<String> l = Arrays.asList(i.split(","));
            return StringUtils.join(ListUtils.sum(l.subList(0, 2),l.subList(4, l.size())),",");
            }).collect(Collectors.toList());

newList.forEach(System.out::println);
//    Value1.1,Value1.2,Value1.5,Value1.6
//    Value2.1,Value2.2,Value2.5,Value1.6
    null

Value1.1,Value1.2,Value1.5,Value1.6

Value2.1、Value2.2、Value2.5、Value2.6

共有1个答案

汪阳辉
2023-03-14

您可以使用regex过滤掉不需要的值:

String pattern = "^([^,]*,[^,]*)(,[^,]*,[^,]*)(.*)$"
/** Explnation:
^              :start of line
(...)          :group capture
[^,]           :all characters which aren't ','
*              :zero or more times
,              :single comma
.              :any character
$              :end of line

([^,]*,[^,]*)  :first capture group ($1), two words seperated by ','
(,[^,]*,[^,]*) :second capture group ($2), the values we want to remove
(.*)           :third capture group ($3), all the rest of the string
**/

Pattern patternCompiled = Pattern.compile(pattern);
List<String> newList = list.stream()
                      .map(i -> patternCompiled.matcher(i).replaceAll("$1$3"))
                      .collect(Collectors.toList());
 类似资料:
  • 问题内容: 鉴于: 我想删除第一个项目中的那个项目。因此,在这种情况下,我们将删除以: 我当前的代码是: 这可行,但是很慢。什么是更好的方法呢? 编辑:我之前没有测试过性能,所以我可能做错了,但是我得到了: 问题答案: 反向删除,就地修改: 就地修改意味着这样做效率更高,因为它不会创建新列表(如列表理解那样)。 由于OP要求提供高效的解决方案,因此这里比较了两个投票最高的答案。 设定 - 清单理解

  • 我正在从远程数据库读取一组行,从本地数据库读取一组类似的行,然后使用RemoveAll删除本地已经存在的远程行。。。 但这对我来说似乎不对。当我真正需要做的只是检查是否存在匹配项时,我认为我不应该计算事物。我尝试了和的各种用法,但得到了废话。我不能使用(如这里建议的),因为列表元素不是同一类型。 有更好的方法吗?

  • 我有一个自定义列表类的应用程序。当尝试使用customer参数执行foreach函数时,会发生以下情况: 错误:

  • 问题内容: 这是一个类似问题的后续问题,该问题询问最佳书写方式 似乎共识是关于 但是,我认为如果只删除一些项目,则大多数项目都将被复制到同一对象中,这可能很慢。在回答另一个相关问题时,有人建议: 但是,此处将搜索列表长度为O(N)的项目。可能我们的局限在于列表以数组而不是链接列表的形式表示,因此删除项目将需要在列表之后移动所有内容。但是,这里建议将collections.dequeue表示为双链表

  • 问题内容: 这个问题已经在这里有了答案 : 循环“忘记”以删除一些项目[重复] (10个答案) 6年前关闭。 我想从列表“ a”中删除项目,其中列表“ b”包含在列表“ a”中找到带有单词的项目 结果应为: 这是因为在列表“ a”的项目中找到了单词“二”和“五六”。 这是我尝试解决的方法: 返回: 为什么这不起作用,如何解决此问题? 谢谢。 问题答案: 遍历列表时,请勿修改列表。这样做会产生不良的

  • 问题内容: 我有表,我想将它做成。我该怎么办? 问题答案: Python清单 list.pop(索引) 删除列表[索引] 这些都将修改您的原始列表。 其他人建议使用切片: 复制清单 可以返回一个子集 另外,如果要执行许多pop(0),则应查看collections.deque 从列表的左端提供更高的性能