ID字符串匹配List中的数据,获得对应的name[算法]
--------------------编程问答--------------------
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
String id_str = "1,2,3";
List<Vo> list = new ArrayList<Vo>();
for (int i = 1; i <= 3; i++) {
Vo vo = new Vo();
vo.setId(i+"");
vo.setName("串"+i);
list.add(vo);
}
String name_str = "";
String attrs[] = id_str.split(",");
for (int i = 0; i <attrs.length; i++) {
for (int j = 0; j < list.size(); j++) {
Vo vo =list.get(j);
System.out.println("@"+attrs[i]);
System.out.println("#"+vo.getId());
if (vo.getId().equals(attrs[i])) {
if (i==0) {
name_str = vo.getName();
}else{
name_str += ","+vo.getName();
}
}
}
}
System.out.println(name_str);
}
}
class Vo{
private String id;
private String name;
/**
* 获取 id
* @return 返回 id
*/
public String getId() {
return id;
}
/**
* 设置 id
* @param 对id进行赋值
*/
public void setId(String id) {
this.id = id;
}
/**
* 获取 name
* @return 返回 name
*/
public String getName() {
return name;
}
/**
* 设置 name
* @param 对name进行赋值
*/
public void setName(String name) {
this.name = name;
}
}
--------------------编程问答--------------------
修改了一下
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
String id_str = "1,2,3";
String attrs[] = id_str.split(",");
List<Vo> list = new ArrayList<Vo>();
for (int i = 1; i <= 3; i++) {
Vo vo = new Vo();
vo.setId(attrs[i-1]);
vo.setName("串"+attrs[i-1]);
list.add(vo);
}
String name_str = "";
for (int i = 0; i <attrs.length; i++) {
for (int j = 0; j < list.size(); j++) {
Vo vo =list.get(j);
System.out.println("@"+attrs[i]);
System.out.println("#"+vo.getId());
if (vo.getId().equals(attrs[i])) {
if (i==0) {
name_str = vo.getName();
}else{
name_str += ","+vo.getName();
}
}
}
}
System.out.println(name_str);
}
}
class Vo{
private String id;
private String name;
/**
* 获取 id
* @return 返回 id
*/
public String getId() {
return id;
}
/**
* 设置 id
* @param 对id进行赋值
*/
public void setId(String id) {
this.id = id;
}
/**
* 获取 name
* @return 返回 name
*/
public String getName() {
return name;
}
/**
* 设置 name
* @param 对name进行赋值
*/
public void setName(String name) {
this.name = name;
}
}
--------------------编程问答--------------------
除了双层嵌套外没有别的更好的做法么
--------------------编程问答--------------------
么你可以考虑使用Map来放。
--------------------编程问答--------------------
如果你的id字符串内容和list元素都是有序或FIFO的,那一个for就可以解决了。否则还是照LS所说做map吧
--------------------编程问答--------------------
希望能给你点启发
package com.study.test;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class T {
public static void main(String[] args){
List<Vo> vos = new ArrayList<Vo>();
Vo vo = new Vo();
vo.id = "1";
vo.name = "jack";
vos.add(vo);
Vo vo1 = new Vo();
vo1.id = "2";
vo1.name = "jon";
vos.add(vo1);
Vo vo2 = new Vo();
vo2.id = "3";
vo2.name = "jon1";
vos.add(vo2);
Vo vo3 = new Vo();
vo3.id = "4";
vo3.name = "jon3";
vos.add(vo3);
String id_str = "1,4";
String[] ids = id_str.split(",");
String values = vos.toString();
if(ids != null){
for(String id : ids){
Matcher m = Pattern.compile("id=" + id + "@name=(.+?)(,|])").matcher(values);
if(m.find()){
System.out.println(m.group(1));
}
}
}
System.out.println(vos);
}
}
class Vo{
String id;
String name;
public String toString(){
return "id=" + id + "@name=" + name;
}
}
--------------------编程问答--------------------
使用 map 不错
--------------------编程问答--------------------
正则的话是不是性能低些
--------------------编程问答--------------------
嵌套for循环。算法复杂度低,效率已经是最快的了
补充:Java , Java EE