已下代码 输出后数据为:酸奶(君乐宝),酸奶(小洋人),酸奶(李子园),纯奶,饮料
有没有适合的方法 可以实现 酸奶(君乐宝,小洋人,李子园),纯奶,饮料
谢谢大家~
StringBuilder stringBuilder = new StringBuilder();
String code="010,011,012,020,030";
String[] split = code.split(",");
for (String s : split) {
//根据 s 查询对应的name
String name=selectName(s);
System.out.println(s + name);
//输出 010+酸奶(君乐宝)
//输出 011+酸奶(小洋人)
//输出 012+酸奶(李子园)
//输出 020+纯奶
//输出 030+饮料
stringBuilder.append(name).append(",");
}
System.out.println(stringBuilder.subSequence(0, stringBuilder.length() - 1));
//输出 酸奶(君乐宝),酸奶(小洋人),酸奶(李子园),纯奶,饮料
//想要输出 酸奶(君乐宝,小洋人,李子园),纯奶,饮料
ps:有些code对应的name 是没有() 符号的 例 以上代码为例只有01开头的有()号
//key用来保存”酸奶“、”纯奶“,value则保存对应的括号里面内容,LinkedHashMap则保证了添加顺序
Map<String, List> map = new LinkedHashMap<>();
StringBuilder stringBuilder = new StringBuilder();
String code = "010,011,012,020,030";
String[] split = code.split(",");
for (String s : split) {
//根据 s 查询对应的name
String name = selectName(s);
System.out.println(s + name);
int index1 = name.indexOf("(");
int index2 = name.indexOf(")");
//s1:括号外的内容
String s1;
//s2:括号里面的内容(不含括号)
String s2;
if (index1 == -1) {
//没有括号
s1 = name;
s2 = null;
} else {
s1 = name.substring(0, index1);
s2 = name.substring(index1 + 1, index2);
}
List<String> list = map.get(s1);
if (list == null) {
list = new ArrayList<>();
map.put(s1, list);
}
if (s2 != null) {
//相同种类的放到一起
list.add(s2);
}
}
for (Map.Entry<String, List> entry : map.entrySet()) {
stringBuilder.append(entry.getKey());
if (entry.getValue().size() > 0) {
//有括号的
stringBuilder.append("(");
stringBuilder.append(String.join(",", entry.getValue()));
stringBuilder.append(")");
} else {
//没括号的
stringBuilder.append(String.join(",", entry.getValue()));
}
stringBuilder.append(",");
}
System.out.println(stringBuilder.subSequence(0, stringBuilder.length() - 1));
public static void main(String[] args) throws IOException {
StringBuilder sb = new StringBuilder();
String codes ="酸奶(君乐宝),酸奶(小洋人),酸奶(李子园),纯奶(伊利),纯奶(蒙牛)";
List<String> strings = Arrays.asList(codes.split(","));
Map<String, List<String>> collect = strings.stream().collect(Collectors.groupingBy(code -> code.substring(0, code.indexOf("("))));
for (Map.Entry<String, List<String>> entry : collect.entrySet()) {
sb.append(entry.getKey()).append("(");
entry.getValue().forEach(str -> sb.append(str.substring(str.indexOf("(") + 1, str.lastIndexOf(")"))).append(","));
if(sb.toString().endsWith(",")){sb.deleteCharAt(sb.length()-1);}
sb.append("),");
}
System.out.println(sb);
//输出 酸奶(君乐宝),酸奶(小洋人),酸奶(李子园),纯奶(伊利),纯奶(蒙牛)
//想要输出 酸奶(君乐宝,小洋人,李子园),纯奶(伊利,蒙牛)
}
public class Test {
//想要输出 酸奶(君乐宝,小洋人,李子园),纯奶,饮料
public static void main(String[] args) {
List<String> list = new ArrayList<>();
String code="010,011,012,020,030";
String[] codes = code.split(",");
Map<String, List<String>> map = Stream.of(codes).collect(Collectors.groupingBy(s -> s.substring(0, 2)));
map.forEach((k,v)->{
String typeName = TypeEnum.getTypeName(k);
if (null == typeName){
return;
}
String name = NameEnum.getName(v);
list.add(typeName + name);
});
System.out.println(String.join(",",list));
}
}
@AllArgsConstructor
enum TypeEnum{
酸奶("01","酸奶"),
纯奶("02","纯奶"),
饮料("03","饮料"),
;
private String code;
private String name;
public static String getTypeName(String code){
for (TypeEnum value : values()) {
if (value.code.equals(code)){
return value.name;
}
}
return null;
}
}
@AllArgsConstructor
enum NameEnum{
君乐宝("010","君乐宝"),
小洋人("011","小洋人"),
李子园("012","李子园"),
;
private String code;
private String name;
public static String getName(String code){
StringBuilder stringBuilder = new StringBuilder();
for (NameEnum value : values()) {
if (value.code.equals(code)){
return stringBuilder.append("(").append(value.name).append(")").toString();
}
}
return "";
}
public static String getName(List<String> codeList){
if (CollectionUtils.isEmpty(codeList)) {
return "";
}
StringBuilder stringBuilder = new StringBuilder();
List<String> nameList = new ArrayList<>();
for (NameEnum value : values()) {
if (codeList.contains(value.code)){
nameList.add(value.name);
}
}
if (CollectionUtils.isEmpty(nameList)){
return "";
}
return stringBuilder.append("(").append(String.join(",",nameList)).append(")").toString();
}
}
拿到name以后用"("分隔一下,然后放到一个map中,key用分隔后的第一段,value用list,list中放分隔后的第二段并relaceall(")","")