[英]If an Arraylist<String> also contains numbers, how can I filter them out?
[英]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.