假设我有一个ArrayList,它有到要处理的特定文件的路径。但是,如果文件夹中只有一个文件,则只能处理此文件。这就是我的意思:
我的ArrayList
<input type="checkbox" name="data[]" value="0"><span class="check">
<input type="checkbox" name="data[]" value="1" ><span class="check">
具有
jquery
假设我的第5个元素是
int main(int argc, char* argv[]) {
// do initialize stuff
bool run = true;
SDL_Event evt;
// game loop
while (run) {
// process OS events
while(SDL_PollEvent(&evt) != 0) {
switch (evt.type) {
case SDL_QUIT:
run = false;
break;
}
}
update();
render();
}
// clean up
SDL_Quit();
return 0;
}
很明显,它是我的0元素的副本,因为这个文件夹中的文件根本不应该被删除。应从列表中删除 C:\ 123 \ 456 \ NameOfUniqueFolder0 。我不能在这里使用 SET ,因为它将“删除”副本,但文件夹的一个路径仍然存在,并且内部的文件获得了proccessed。
答案 0 :(得分:2)
在这里使用散列图可能有意义。密钥可以是文件路径,如果密钥存在,则值将是文件发生的次数。像这样:
Map<String, Integer> map = new HashMap<>();
map.put("C:\123\456\NameOfUniqueFolder0", 1);
map.put("C:\123\456\NameOfUniqueFolder1", 1);
map.put("C:\123\456\NameOfUniqueFolder2", 1);
map.put("C:\123\456\NameOfUniqueFolder3", 1);
map.put("C:\123\456\NameOfUniqueFolder4", 1);
现在当一条新路径出现时,增加其计数器:
String newPath = "C:\123\456\NameOfUniqueFolder0";
Integer val = map.get(newPath);
map.put(newPath, val == null ? 1 : val.intValue() + 1);
}
最后,您可以迭代此地图,并检查每个键的计数器值。然后,您只需处理仅发生过一次的文件:
for (Map.Entry<String, Integer> entry : map.entrySet()) {
int count = entry.getValue();
if (count == 1) {
// process this file
}
// otherwise skip this path
}
答案 1 :(得分:2)
您可以这样做:
public class RemoveDuplicatesFromList {
public static void main(String[] args) {
List<String> originalList = new ArrayList<String>();
//add your strings to list here
Set<String> duplicateValues = new HashSet<String>();
for(String str:originalList){
//if firstIndex != lastIndex duplicate is present
if(originalList.indexOf(str)!=originalList.lastIndexOf(str))
duplicateValues.add(str);
}
//remove duplicates from original list
originalList.removeAll(duplicateValues);
System.out.println(originalList);
}
}
答案 2 :(得分:0)
您可以执行以下操作。它会给你带有它的出现次数的路径图。例如:{C:\123\456\NameOfUniqueFolder0=2, C:\123\456\NameOfUniqueFolder1=1}
Map<String, Long> collect = pathsToTheFile.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
在此之后,您只能处理发生次数等于1的路径。
答案 3 :(得分:0)
如果您希望按排序顺序使用TreeSet
,则只能使用HashSetHashSet<String> set=new HashSet<String>();
set.add("C:\123\456\NameOfUniqueFolder0");
set.add("C:\123\456\NameOfUniqueFolder1");
set.add("C:\123\456\NameOfUniqueFolder2");
set.add("C:\123\456\NameOfUniqueFolder3");
set.add("C:\123\456\NameOfUniqueFolder4");
set.add("C:\123\456\NameOfUniqueFolder0");
//Traversing elements
Iterator<String> itr=set.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
您的输出将是
C:\ 123 \ 456 \ NameOfUniqueFolder0
C:\ 123 \ 456 \ NameOfUniqueFolder1
C:\ 123 \ 456 \ NameOfUniqueFolder2
C:\ 123 \ 456 \ NameOfUniqueFolder3
C:\ 123 \ 456 \ NameOfUniqueFolder4
答案 4 :(得分:0)
您可以尝试此代码
List<String> pathsToTheFile = new ArrayList<String>();
pathsToTheFile.add("C:/123/456/NameOfUniqueFolder0");
pathsToTheFile.add("C:/123/456/NameOfUniqueFolder1");
pathsToTheFile.add("C:/123/456/NameOfUniqueFolder2");
pathsToTheFile.add("C:/123/456/NameOfUniqueFolder0");
pathsToTheFile.add("C:/123/456/NameOfUniqueFolder3");
pathsToTheFile.add("C:/123/456/NameOfUniqueFolder4");
pathsToTheFile.add("C:/123/456/NameOfUniqueFolder0");
pathsToTheFile.add("C:/123/456/NameOfUniqueFolder0");
String newPathToBeAdded = "C:/123/456/NameOfUniqueFolder0";
while(pathsToTheFile.contains(newPathToBeAdded)) { // the new path to be added
pathsToTheFile.remove(newPathToBeAdded);
}
System.out.println(pathsToTheFile);