java 中字符串String 切割 合并

已下代码 输出后数据为:酸奶(君乐宝),酸奶(小洋人),酸奶(李子园),纯奶,饮料
有没有适合的方法 可以实现 酸奶(君乐宝,小洋人,李子园),纯奶,饮料
谢谢大家~

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(")","")