我有一个包含如下元素的List<String>:
"<prefix-1>/A",
"<prefix-1>/B",
"<prefix-2>/A",
"<prefix-2>/B",
"<prefix-3>/A",
"<prefix-3>/B",也就是说,对于每个<prefix>,都有两个条目:<prefix>/A和<prefix>/B。(我的列表已经排序,前缀可能有不同的长度。)
我想要前缀的列表:
"<prefix-1>",
"<prefix-2>",
"<prefix-3>",当多个(但始终是恒定数量的元素)对应于转换后的列表中的一个元素时,转换源列表的好方法是什么?
谢谢你的考虑
发布于 2013-05-06 23:09:20
如果前缀的长度始终不变,则可以将它们修剪掉并放入一个集合中:
List<String> elements = // initialize here
Set<String> prefixes = new HashSet<String>();
for( String element : elements) {
String prefix = element.substring(0,"<prefix-n>".length());
prefixes.add(prefix);
}
// Prefixes now has a unique set of prefixes.如果你有一个可变长度的前缀,或者你有更复杂的条件,你也可以对正则表达式做同样的事情。
发布于 2013-05-06 23:08:28
这是一个不改变结果中前缀顺序的解决方案。由于元素是预先排序的,因此您可以获取元素,直到找到与上次获取的元素不同的前缀,然后将新元素添加到结果中,如下所示:
List<String> res = new ArrayList<String>();
String last = null;
for (String s : src) {
String cand = s.substring(0, s.lastIndexOf('/'));
// initially, last is null, so the first item will always be taken
if (!cand.equals(last)) {
// The assignment of last happens together with addition.
// If you think it's not overly readable, you can move it out.
res.add(last = cand);
}
}这是一个demo on ideone。
发布于 2013-05-06 23:09:38
如果结构上相似的元素的数量总是相同的,那么你可以在列表的开头循环来找出这个数字,然后跳过元素来构造其余的元素。
https://stackoverflow.com/questions/16401598
复制相似问题