나의질문답

문자열 잘라서 arraylist만들기 다시 질문드립니다.

예쁜꽃이피었으면 2014. 11. 11. 14:19



//검색리스트 세션저장

HttpSession session = request.getSession();

if(session.getAttribute("result_".concat(fileName)) != null){

request.setAttribute("plantList", session.getAttribute("result_".concat(fileName)));

else{

어쩌고 저쩌고 소스


  // 검색결과 세션저장...

        session.setAttribute("result_".concat(fileName),articleList);

         

}


해결





http://www.okjsp.net/seq/265219


안녕하세요



밑에 질문이 있긴하지만 


수정하는 것보다 새로 질문을 드리는 게 나을 것 같아서 다시 올립니다.


 ArrayList<plant> articleList = new ArrayList<plant>();

String plantList  = request.getParameter("getplantList");

if(plantList != null){

String plantList_token = plantList; 

String[] array = plantList_token.split(","); 

for(int i=0; i < array.length; i++){

System.out.format("array[%d] = %s%n", i,array[i]);

}

articleList = new ArrayList<plant>();

Collections.addAll(articleList, array);


이렇게 했는데 마지막 줄에 addAll에 빨간줄이 생깁니다.


The method addAll(Collection<? super T>, T...) in the type Collections is not applicable for the arguments (ArrayList<plant>, String[])

이런 문구가 뜨고요.


arraylist의 형식이 제네릭?형이면 쓸 수 없나요?


그렇다면 다른 방법이 있을까요?


아니면 어디가 틀렸나요?;;







답변 1 ]


조금 수정해봤습니다. 


ArrayList<String> articleList = new ArrayList<>(); 

String plantList = "12312,123123,123,2132,123,123123,123123,122312"; 

if(plantList != null) { 

// String plantList_token = plantList; 

String[] array = plantList.split(","); 

for (int i = 0; i < array.length; i++) { 

System.out.format("array[%d] = %s%n", i, array[i]); 

Collections.addAll(articleList, array); 


for (int i = 0; i < array.length; i++) { 

System.out.format("articleList[%d] = %s%n", i, articleList.get(i)); 



결과 


array[0] = 12312 

array[1] = 123123 

array[2] = 123 

array[3] = 2132 

array[4] = 123 

array[5] = 123123 

array[6] = 123123 

array[7] = 122312 

articleList[0] = 12312 

articleList[1] = 123123 

articleList[2] = 123 

articleList[3] = 2132 

articleList[4] = 123 

articleList[5] = 123123 

articleList[6] = 123123 

articleList[7] = 122312 


결론 


잘 됩니다. 코드가 난잡하긴 하지만요. 

Java 8 로 컴파일 했습니다.











답변감사합니다. ㅜ 

해주신 대로 해봤습니다. 

ArrayList<plant> articleList = new ArrayList<plant>(); 


String plantList = request.getParameter("getplantList"); 

if(plantList != null){ 

String[] array = plantList.split(","); 


for(int i=0; i < array.length; i++){ 

System.out.format("array[%d] = %s%n", i,array[i]); 


Collections.addAll(articleList, array); 

for (int i = 0; i < array.length; i++) { 

System.out.format("articleList[%d] = %s%n", i, articleList.get(i)); 


이렇게요 그런데 여전히 addAll가 빨간줄입니다. 

ArrayList<plant> articleList = new ArrayList<plant>(); 여기가 문제 인가요? ㅜ




답변1-1 ]




네. plant 가 무슨 bean 인지는 모르겠지만 String[] 의 각 요소, 즉 String 을 집어넣어야 하는데 plant 가 String 을 넣을 수 있는 형태(상속 받은)입니까? 

제 코드에 왜 그 부분이 빠지고 String 이 대신 들어가 있는지 생각해 보시면 답이 나오겠죠.



------------->

                         왜 일까...








아..네 db의 데이터를 가져와야 해서 필요한데.. 

감사합니다. 더 들여다보겠습니다.





질문있습니다. 


array가 string형태 이기 ?문에 <plant>는 매개변수?로 받을 수 없는 건가요? 


그렇다면 제네릭 배열이란게 있는지 찾아보았는데 없는 것같습니다. 

이경우 어떻게 해야 하나요? 



*addAll() 메소드의 매개변수의 Collection<? extends E> 중 '? extends E'가 의미하는 것은 

요소 클래스형 E를 상속받는 모든 클래스라는 의미다. 

예를 들어 String의 경우 String을 상속받는 모든 클래스로 이뤄진 Collection객제를 매개변수로 받을 수 있다. 


* http://ojava.tistory.com/32








답변1-2]



담는 그릇이 다르잖아요. 


개체에 대한 개념을 전혀 못잡고 계신 것 같은데요... 


아래 코드를 보시고...이해가 안되신다면, 다시 배우시길 적극 권합니다. T.T 제가 어디서부터 알려드려야 할지 감이 안잡히는 상황이라... 


Plant.java 


public class Plant { 


String test1; 

int test2; 


public int getTest2() { 

return test2; 


public void setTest2(int test2) { 

this.test2 = test2; 


public String getTest1() { 


return test1; 


public void setTest1(String test1) { 

this.test1 = test1; 


Test.java (Main) 


import java.util.ArrayList; 

import java.util.Collections; 


public class Test { 


public static void main(String[] args) { 



Plant data = null; 

ArrayList<Plant> list = new ArrayList<>(); 

Plant[] array = new Plant[3]; 


// array 초기화 

data = new Plant(); 

data.setTest1("test1"); 

data.setTest2(0); 


array[0] = data; 


data = new Plant(); 

data.setTest1("test2"); 

data.setTest2(1); 


array[1] = data; 


data = new Plant(); 

data.setTest1("test3"); 

data.setTest2(2); 


array[2] = data; 


// ArrayList 로 옮겨 담기 

Collections.addAll(list, array); 


for (Plant plant : list) { 


System.out.format("articleList = %s / %d%n", plant.getTest1(), plant.getTest2()); 






결과 


articleList = test1 / 0 

articleList = test2 / 1 

articleList = test3 / 2 

반응형