繁体   English   中英

如何从 String 中过滤掉 Unique 元素并将它们存储到 ArrayList

[英]How filter out Unique elements from a String and store them into an ArrayList

给定一个过滤的字符串。 我只想将其子字符串添加到ArrayList中,前提是它尚未包含它。

我的代码:

Pattern reg = Pattern.compile(",");
ArrayList<String> SANR = reg.splitAsStream(joiner.toString())    
        .filter(role -> role.contains("ABB"))
        .map(str -> str.replaceAll("ABB", ""))
        .collect(Collectors.toCollection(ArrayList::new));

作为输入,它获取所有附加了ABB的值,例如[123,123,244,244,255] ,所以我想确保输出只是:

[123,244,255]

您需要应用distinct()操作以确保结果不包含重复项。 为了实现它并保留流中元素的初始顺序,它在后台使用LinkedHashSet

不要将ArrayList用作类型,它会使您的代码变得僵硬。 请参阅“编程到接口”是什么意思?

顺便说一句, Collectors.toList()以及 Java 16 toList()操作实际上会给你一个ArrayList ,但你的代码不应该依赖它。 如果将来会设计一个更好的List接口的通用实现,它能够完成ArrayList所做的一切,如果您不特别要求ArrayList ,您将免费获得它。 针对接口编写代码。

Pattern reg = Pattern.compile(",");
List<String> sanr = reg.splitAsStream(joiner.toString())
    .filter(role -> role.contains("ABB"))
    .map(str -> str.replaceAll("ABB" , ""))
    .distinct()
    .collect(Collectors.toList());

旁注: 按照惯例,大写名称应该用于常量字段(即标记为final ),对于本地值,使用以小写字母开头的驼峰式命名。 并且名称本身应该是有意义的,如果sanr是某种缩写,它应该记录在某处。

如果它适合您的用例,我建议为此使用 Set 抽象数据类型而不是 ArrayList。 它允许您不在字符串列表中存储任何重复项。

签出: Java 集

如果您想将其保留为 ArrayList ,您可以执行以下操作:

myArrayList = new ArrayList<String>(new LinkedHashSet<String>(myArrayList));

从“myArrayList”中删除任何重复项

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM