Java 将hashmap中的值标记化
我有一个映射,它的键值和字符串一样长。地图的值从数据库中获取,格式如下Java 将hashmap中的值标记化,java,hashmap,stringtokenizer,Java,Hashmap,Stringtokenizer,我有一个映射,它的键值和字符串一样长。地图的值从数据库中获取,格式如下 1: BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3,BusinessPartner.name4 2: BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3 6: ADDRESS.addressline1,ADDRESS.addressline2,ADDRESS.a
1: BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3,BusinessPartner.name4
2: BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3
6: ADDRESS.addressline1,ADDRESS.addressline2,ADDRESS.addressline3
其中1、2、6是键
我需要标记键1的字符串,结果应该是
业务伙伴和其他值应为name1、name2、name3、name4。
我这样做是因为我需要将这些值作为
地图(名称1、名称2、名称3、名称4)>
我可以拆分字符串,但如何将Businesspartner作为其他实体的通用值
有人能告诉我怎么做吗
谢谢这对你的生活有用吗
public class Tokenize {
static Long keysFromDB[] = {1L, 2L, 6L};
static String stringsFromDB[] = {
"BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3,BusinessPartner.name4",
"BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3",
"ADDRESS.addressline1,ADDRESS.addressline2,ADDRESS.addressline3"};
@Test
public void tokenize() {
// use linked hashmap to preserve the order
Map<Long, Set<String>> tokenized = new LinkedHashMap<Long, Set<String>>();
int c = 0;
for(Long key : keysFromDB) {
// use linked hashset to preserve the order
Set<String> record = new LinkedHashSet<String>();
String splitedDBStrings[] = stringsFromDB[c++].split("\\.|,");
System.out.println("List: " + Arrays.asList(splitedDBStrings));
for(String s : splitedDBStrings) {
record.add(s);
}
System.out.println("Set: " + record);
tokenized.put(key, record);
}
System.out.println(tokenized);
}
}
公共类标记化{
静态长键FromDB[]={1L,2L,6L};
静态字符串stringsFromDB[]={
“BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3,BusinessPartner.name4”,
“BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3”,
“ADDRESS.addressline1,ADDRESS.addressline2,ADDRESS.addressline3”};
@试验
公共void标记化(){
//使用链接hashmap保留顺序
Map tokenized=新建LinkedHashMap();
int c=0;
for(长键:keysFromDB){
//使用链接哈希集保留顺序
Set record=newlinkedhashset();
String splitedDBStrings[]=stringsFromDB[c++].split(“\\.\124;,”);
System.out.println(“List:+Arrays.asList(splitedDBStrings));
用于(字符串s:spliteddbstring){
记录。添加;
}
系统输出打印项次(“设置:+记录);
标记化。放置(键、记录);
}
System.out.println(标记化);
}
}
让我们从头开始:
final Pattern pattern = Pattern.compile("[,\\s*]?([^.]+)\\.([^,]+)[,\\s*]?");
final Map<Long, String> myMap = getMapFromSomewhere();
for(final Map.Entry<Long, String> entry : myMap.entrySet()) {
final String myString = entry.getValue();
final Matcher matcher = pattern.matcher(myString);
final Map<String, List<String>> tokenised = new HashMap<String, List<String>>();
while (matcher.find()) {
final String key = matcher.group(1);
List<String> names = tokenised.get(key);
if(names == null) {
names = new LinkedList<String>();
tokenised.put(key, names)
}
names.add(matcher.group(2));
}
//do stuff with map.
}
输出:
BusinessPartner
name1
BusinessPartner
name2
BusinessPartner
name3
BusinessPartner
name4
运行这个
public static void main(String[] args){
Map<Long, String> dbmap = new HashMap<Long, String>();
dbmap.put((long) 1, "BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3,BusinessPartner.name4");
dbmap.put((long) 2, "BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3");
dbmap.put((long) 6, "ADDRESS.addressline1,ADDRESS.addressline2,ADDRESS.addressline3");
//Loop through the Map
Iterator<Entry<Long, String>> iterator = dbmap.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<Long, String> entry = (Map.Entry<Long, String>) iterator.next();
//Split the string on comma ','
//result entries should be 'BusinessPartner.name1', 'BusinessPartner.name2' etc
String[] commaSplit = entry.getValue().split(",");
//loop through each entry
for(int x=0; x<commaSplit.length; x++){
//Split on Full Stop
//Result should be 'BusinessPartner', 'name2'
String[] dotSplit = commaSplit[x].split("\\.");
//print out common Value
System.out.println("Common Value is : " + dotSplit[0]);
//print out second value
System.out.println("Second Value is : " + dotSplit[1]);
System.out.println();
}
}
}
我想他希望
业务伙伴
和地址
(字符串正在重复)成为结果的一部分我想他只想要一次,他写结果应该是业务伙伴,其他值应该是name1,name2,name3,name4。
因此业务伙伴,name1,name2,name3,name4
感谢朋友们的回复
public static void main(String[] args){
Map<Long, String> dbmap = new HashMap<Long, String>();
dbmap.put((long) 1, "BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3,BusinessPartner.name4");
dbmap.put((long) 2, "BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3");
dbmap.put((long) 6, "ADDRESS.addressline1,ADDRESS.addressline2,ADDRESS.addressline3");
//Loop through the Map
Iterator<Entry<Long, String>> iterator = dbmap.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<Long, String> entry = (Map.Entry<Long, String>) iterator.next();
//Split the string on comma ','
//result entries should be 'BusinessPartner.name1', 'BusinessPartner.name2' etc
String[] commaSplit = entry.getValue().split(",");
//loop through each entry
for(int x=0; x<commaSplit.length; x++){
//Split on Full Stop
//Result should be 'BusinessPartner', 'name2'
String[] dotSplit = commaSplit[x].split("\\.");
//print out common Value
System.out.println("Common Value is : " + dotSplit[0]);
//print out second value
System.out.println("Second Value is : " + dotSplit[1]);
System.out.println();
}
}
}
Common Value is : BusinessPartner
Second Value is : name1
Common Value is : BusinessPartner
Second Value is : name2
Common Value is : BusinessPartner
Second Value is : name3
Common Value is : BusinessPartner
Second Value is : name4
Common Value is : BusinessPartner
Second Value is : name1
Common Value is : BusinessPartner
Second Value is : name2
Common Value is : BusinessPartner
Second Value is : name3
Common Value is : ADDRESS
Second Value is : addressline1
Common Value is : ADDRESS
Second Value is : addressline2
Common Value is : ADDRESS
Second Value is : addressline3