原始数组: String [] data = {"101//aaa","102//bbb","101//ccc","103//aaa","102//vvvv"};
把相同开头的,例如101,102,103开头的元素,取出来组成新的数组
String[] a1={"101//aaa","101//ccc"}; String[] a2={"102//bbb","102//vvvv"}; String[] a3={"103//aaa"};
1.方法一:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class testa {
public static void main(String[] args) {
String [] data = {"101//aaa","102//bbb","101//ccc","103//aaa","102//vvvv"};
Map<String,List<String>> map = new HashMap<>();
for (String str : data) {
String key = str.substring(0, str.indexOf("//"));
List<String> list = map.get(key);
//如果map中对应key,创建String数组,并加到map中
if(list==null||list.isEmpty()){
list = new ArrayList<>();
map.put(key,list);
}
//如果map有key对应的string数组,更新数组,为啥map没有put就更新了数组
list.add(str);
}
System.out.println(map);
}
}
打印出来:
{101=[101//aaa, 101//ccc], 102=[102//bbb, 102//vvvv], 103=[103//aaa]}
2.方法二:
import org.apache.commons.lang.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
public class test {
private static HashMap<String,List<String>> mapSave = new HashMap<>();
public static void main(String[] args){
mapSave.clear();
List<String> list = new ArrayList<>(); //不要将这句写在外面,不然会重复写入数据。
//一个数组,不确定
String[] data={"101//aaa","102//bbb","101//ccc","103//aaa","102//vvvv"};
//怎么把前面三个开头相同的元素取出来组成数组(例如101,102,103开头的)
String[] a1={"101//aaa","101//ccc"};
String[] a2={"102//bbb","102//vvvv"};
String[] a3={"103//aaa"};
for (int i=0;i<data.length;i++){
String a=data[i];
System.out.println("1.原始数组data中的值:"+a);
String b=StringUtils.substringBefore(a, "//");
System.out.println("2.截取到的字符串:"+b);
//判断map是否有这个key
boolean flag=mapSave.containsKey(b);
if (flag==true){
//有这个key
List<String> stringList=mapSave.get(b);
System.out.println("3.map中有这个key,根据这个key取到的数组:"+stringList);
stringList.add(a);
System.out.println("4.数组stringList增加一个数据:"+stringList);
mapSave.put(b,stringList);
}else {
//没有这个key,创建string数组,并加到map中
List listaa= new ArrayList();
listaa.add(a);
System.out.println("4.新创建的数组listaa:"+listaa);
mapSave.put(b,listaa);
}
}
System.out.println("输出map:"+mapSave);
}
}
打印出来:
输出map:{101=[101//aaa, 101//ccc], 102=[102//bbb, 102//vvvv], 103=[103//aaa]}
3.方法三: