约阿希姆做对了。那些说你应该在把它们放在第一个列表之前修剪你的字符串的人也说对了。
无论如何,如果后者不适合您,则可能有另一种方法:您确定要使用所有修剪过的字符串吗?或者你会只使用其中的几个,比如说,可能只使用前五个?那么把它们全部修剪掉可能有点过头了。
您可以设计一个特殊的List
实现来存储原始列表,但会给出修剪的元素。这就是我的意思:
public class ImmutableStringTrimmingList extends AbstractList<String> {
private final List<String> stringList;
public ImmutableStringTrimmingList(List<String> stringList) {
this.stringList = stringList;
}
@Override
public String get(int index) {
return stringList.get(index).trim();
}
@Override
public int size() {
return stringList.size();
}
}
存储原始列表(因此对该ImmutableStringTrimmingList
列表的任何更改也将在此处传播)并String
分发延迟修剪的对象。如果您不想做任何不必要的工作,这会很有帮助,因为它只会修剪get()
. 它还可以适应缓存修剪过的对象,这样就不必每次都重新修剪它。但如果你觉得这门课对你有帮助,那对你来说是一种练习。
或者,如果你是 Guava 用户,你可以使用Lists.transform()
which 基本上做同样的事情,也很懒惰。
List<String> trimmedList = Lists.transform(list, new Function<String, String>() {
@Override
public String apply(String input) {
return input.trim();
}
});