将 List 或 Set 的每个元素小写的最有效方法是什么?
我对列表的想法:
final List<String> strings = new ArrayList<String>();
strings.add("HELLO");
strings.add("WORLD");
for(int i=0,l=strings.size();i<l;++i)
{
strings.add(strings.remove(0).toLowerCase());
}
有更好、更快的方法吗?这个例子对于 Set 来说是什么样的?由于目前没有将操作应用于集合(或列表)的每个元素的方法,是否可以在不创建额外的临时集合的情况下完成?
这样的事情会很好:
Set<String> strings = new HashSet<String>();
strings.apply(
function (element)
{ this.replace(element, element.toLowerCase();) }
);
谢谢,
原文由 Chris 发布,翻译遵循 CC BY-SA 4.0 许可协议
这似乎是一个相当干净的列表解决方案。它应该允许使用特定的 List 实现来提供对列表遍历(线性时间)和字符串替换(恒定时间)都是最佳的实现。
这是我能想到的最好的集合。正如其他人所说,由于多种原因,无法在集合中就地执行操作。小写字符串可能需要放在集合中与其替换的字符串不同的位置。此外,如果小写字符串与另一个已经添加的小写字符串相同,则可能根本不会将其添加到集合中(例如,“HELLO”和“Hello”都会产生“hello”,这将只能添加到集合中一次)。