Мне нужно найти список папок, в которых может быть больше папок,
и добавьте новую папку в зависимости от того, какая папка является ее родительской (путь хранится в виде строки, например, для = = root / MyCom / home / "). Затем я заполняю поле новым именем папки и добавляю его в конечную папку (например, "home /").
Ниже, как вы можете видеть, я могу перейти в нужное место и добавить новую папку в текущую папку. Моя проблема в том, что я не могу гарантировать, что элемент currentFolder вернется в список, из которого он пришел
как я могу добавить папку в список папок, который может быть в списке папок, который может быть в списке папок и даже больше?
YFUser user = (YFUser)getSession().getAttribute(SESSION_USER);
Folder newFolder = new Folder();
newFolder.setFolderName(foldername);
// this is the path string (root/MyCom/home/) split in the different folder names
String folderNames[] = folderLocationString.split("/");
int folderNamesLength = folderNames.length;
Folder root = user.getRoot();
Folder currentFolder = root;
for(int i=0;i<folderNamesLength; i++){
// because root is folderNames[i]
String folderName = folderNames[i];
int currentFolderSize = currentFolder.getChildren.getSize();
for(int o=1; o<= currentFolderSize ; o++){
if(currentFolder.getChildren().get(o) instanceof Folder){
if(folderName.equals(currentFolder.getChildren().get(o).getFolderName())){
currentFolder = currentFolder.getChildren().get(o);
if (i == counter){
//now i am inside the correct folder and i add it to the list of folders within it
//the trouble is knowing how to re add this changed folder back to the list before it
currentFolder.getChildren.add(newFolder);
}
}
}
}
}
это простая версия того, что мне нужно сделать
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
List<String> strings = new ArrayList<String>();
strings.add("Donkey");
strings.add("hello");
strings.add("me");
strings.add("you");
strings.add("everyone");
strings.add("not u");
int counter= strings.size();
for (int i=0 ; i< counter ; i++){
System.out.println(strings.get(i));
if(strings.get(i).equals("Donkey")){
strings.remove(i);
strings.add(i, "not a Donkey");
}
}
for(String s : strings){
System.out.println(s);
}
}
}
это распечатает Осел, привет, я, ты, все, а не ты
, а затем
не осел, привет, я, ты, все, а не ты,
как вы можете видеть здесь, я заменяю строку "Donkey" на "not Donkey"
так что с точки зрения моего проекта, мне нужно получить родительскую папку из списка, добавить новую папку и затем удалить старую родительскую папку с новой обновленной.
редактирование:
это мой класс папок, который содержит список объектов иерархии, который может быть либо fileInformations, либо Folders, `
пакет com.example.client;
@Entity
@DiscriminatorValue("F")
public class Folder extends Hierarchy {
@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinTable(name = "FOLDER_JOIN_FILELOCATION", joinColumns = {
@JoinColumn(name = "folder_id") }, inverseJoinColumns = {
@JoinColumn(name = "file_information_id") })
private List<Hierarchy> children = new ArrayList<Hierarchy>() ;
@Column(name = "folder_name")
private String folderName;
@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
@JoinTable(name="FOLDER_JOIN_FOLDER",
joinColumns = @JoinColumn(name="parent_folder_id"),
inverseJoinColumns = @JoinColumn(name="folder_ID")
)
private Hierarchy parent;
public Folder(){
}
public String getFolderName() {
return folderName;
}
public void setFolderName(String folderName) {
this.folderName = folderName;
}
public List<Hierarchy> getChildren() {
return children;
}
public void setChildren(List<Hierarchy> children) {
this.children = children;
}
@Override
public void addChild(Hierarchy h) {
children.add(h);
}
public Hierarchy getParent() {
return parent;
}
public void setFolder(Hierarchy folder) {
this.parent = folder;
}
@Override
public String toString() {
String val = this.folderName;
val += "/";
for(Hierarchy h : children ){
val += h.toString();
}
return val;
}
public Hierarchy getChild(int index){
return children.get(index);
}
}
теперь этот пример ниже, когда я вынимаю элемент списка, редактирую его, я думаю, что Питер говорит, что это отредактирует список напрямую, но когда я запускаю этот код, он не
List<String> strings = new ArrayList<String>();
strings.add("Donkey");
strings.add("hello");
strings.add("me");
strings.add("you");
strings.add("everyone");
strings.add("not u");
int counter= strings.size();
for (int i=0 ; i< counter ; i++){
System.out.println(strings.get(i));
if(strings.get(i).equals("Donkey")){
String test = strings.get(i);
test += " not now though";
}
}
for(String s : strings){
System.out.println(s);
}
`