iT邦幫忙

0

Java List<JavaBean>某個欄位 轉換 String array

這是我的JavaBean

public class Employee implements java.io.Serializable{  

private int id;  
private String name;

public Employee(){} 

public void setId(int id){
this.id=id;
}  

public int getId(){
return id;
}  

public void setName(String name){
this.name=name;
}  

public String getName(){
return name;
}  

}

想要只拿Employee的name組成一個String array
網路上我有找到這種方法轉換,但好像不能只取某個變數

List<String> list = new ArrayList<String>();    
list.add("a1");    
list.add("a2");  
String[] toBeStored = list.toArray(new String[list.size()]);    
for(String s : toBeStored) {    
     System.out.println(s);    
} 

要這樣做是因為在JSF itemvalue的值要是String型態
想問問問各位有甚麼好法子
謝謝大家/images/emoticon/emoticon18.gif

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
鬼王很慘
iT邦新手 2 級 ‧ 2021-01-11 15:45:27
最佳解答

你的問題應該不只轉換
OO的概念要再加強

List<Employee> employees = new ArrayList<Employee>();
String[] employeeNames = new String[employees.size()];

for (int i = 0; i < employees.size(); i++) {
    employeeNames[i] = employees.get(i).getName();
}
看更多先前的回應...收起先前的回應...

好讚,OO我會加強的,不過感覺對List比較不熟
剛剛試了這個式子 把JavaBean換成從資料庫抓出來的資料他不給過

List<User> u = qualityFacade.findbyDept();
String []u_buffer = new String[u.size()];
UserList = new ArrayList<String>();
for(int i=0 ; i<u.size() ; i++){
    u_buffer[i]=u.get(i).getName();
    UserList.add(u_buffer[i];
}

console出現User不能cast成String類別覺得很怪
我用debug mode之後他說getName這個方法不在String內怪怪ㄉ兒

一、你的命名有問題
u、u_buffer、UserList
這是三種命名規則
沒有見名知義,也不符內容

二、描述不清楚
完整程式碼長怎樣?
原始錯誤訊息是什麼?哪一行?
你 debug 做了哪些事?

三、邏輯詭異
為什麼要一個 Array 一個 List 裝一樣的東西?

鬼王很慘
好我週五再來跟你說一下程式碼
debug的部分,我只有逐步執行看為甚麼那邊會噴error
邏輯的部分,array是只要取得資料庫的某一欄位,list則是把array的值都放進去,目的是前端(itemvalue)要做一個下拉選單
感謝你耐心地回復/images/emoticon/emoticon02.gif

史帝夫 iT邦新手 3 級 ‧ 2021-01-12 10:30:06 檢舉

若開發是使用JAVA8以上建議用 stream 來處理比較簡便,像這樣...

List<User> users = qualityFacade.findbyDept();
String[] names = users.stream().map(User::getName).toArray(String[]::new);

鬼王很慘謝謝我已經處理好了
史帝夫謝謝你的方法,不過我會後還是用鬼王的

我要發表回答

立即登入回答