面试题求解答

朝霞清辉 2020-08-06 11:55:53
@Data
class Key {
private String k;
private List<Key> list;
}
public class Test {
public static void main(String[] args) {
List<String> strList = Arrays.asList(
"信息部,IT组,张三",
"信息部,IT组,李四",
"信息部,运维组,王五",
"科技部,研发组,赵六");
List<Key> list = new ArrayList<>();

// TODO 请填写此处代码

System.out.println(JSON.toJSONString(list));
}
}

要求如下

引用
输出结果(为了方便区分结构,我们对JSON串进行了换行):

[
{
"k": "信息部",
"list": [
{
"k": "IT组",
"list": [
{
"k": "张三"
},
{
"k": "李四"
}
]
},
{
"k": "运维组",
"list": [
{
"k": "王五"
}
]
}
]
},
{
"k": "科技部",
"list": [
{
"k": "研发组",
"list": [
{
"k": "赵六"
}
]
}
]
}
]
...全文
493 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2020-08-06
  • 打赏
  • 举报
回复
简单的for循环就可以了

public class Test {
public static void main(String[] args) {
List<String> strList = Arrays.asList(
"信息部,IT组,张三",
"信息部,IT组,李四",
"信息部,运维组,王五",
"科技部,研发组,赵六");
List<Key> list = new ArrayList<>();

// TODO 请填写此处代码
for (String s : strList) { //字符串list循环
String[] arr = s.split(","); //字符串分割
List<Key> ll = list;
for (int i=0; i<arr.length; i++) { //分别判断分割后的字符串在结果list的k是否存在
Key key = null;
for (Key k : ll) {
if (arr[i].equals(k.getK())) {
key = k;
break;
}
}
if (key == null) { //如果不存在,new一个Key放到结果list里
key = new Key();
key.setK(arr[i]);
ll.add(key);
for (int j=i+1; j<arr.length; j++) { //其实主要就是循环生成list
ll = new ArrayList<>();
key.setList(ll);
key = new Key();
key.setK(arr[j]);
ll.add(key);
}
break;
}
ll = key.getList(); //如果存在,继续判断key.list里是否存在下一个分割的字符串
if (ll == null) {
ll = new ArrayList<>();
key.setList(ll);
}
}
}

System.out.println(JSON.toJSONString(list));
}
}
朝霞清辉 2020-08-06
  • 打赏
  • 举报
回复
引用 1 楼 ITjavaman 的回复:

public static void main(String[] args) {
List<String> strList = Arrays.asList(
"信息部,IT组,张三",
"信息部,IT组,李四",
"信息部,运维组,王五",
"科技部,研发组,赵六");
List<Key> list = new ArrayList<>();

// TODO 请填写此处代码
String[] split = null;
for(String str:strList){
split = str.split(",");
f(0,split,list);
}
System.out.println(JSON.toJSONString(list));
}

private static void f(int i,String [] split,List<Key> list){
Key key = null;
if(i==split.length){
key = getKey(split[i-1], list);
if(null != key){
key.setList(null);
}
return;
}
if(null == list){
list = new ArrayList<>();
}
key = getKey(split[i], list);
if(null == key){
key = new Key();
key.setK(split[i]);
key.setList(new ArrayList<>());
list.add(key);
}
f(i+1,split,key.getList());
}

private static Key getKey(String keyStr,List<Key> list){
for (int i=0;i<list.size();i++){
if(list.get(i).getK().equals(keyStr)){
return list.get(i);
}
}
return null;
}
谢谢
ITjavaman 2020-08-06
  • 打赏
  • 举报
回复

    public static void main(String[] args) {
        List<String> strList = Arrays.asList(
                "信息部,IT组,张三",
                "信息部,IT组,李四",
                "信息部,运维组,王五",
                "科技部,研发组,赵六");
        List<Key> list = new ArrayList<>();

        // TODO 请填写此处代码
        String[] split = null;
        for(String str:strList){
            split = str.split(",");
            f(0,split,list);
        }
        System.out.println(JSON.toJSONString(list));
    }

    private static void f(int i,String [] split,List<Key> list){
        Key key = null;
        if(i==split.length){
            key = getKey(split[i-1], list);
            if(null != key){
                key.setList(null);
            }
            return;
        }
        if(null == list){
            list = new ArrayList<>();
        }
        key = getKey(split[i], list);
        if(null == key){
            key = new Key();
            key.setK(split[i]);
            key.setList(new ArrayList<>());
            list.add(key);
        }
        f(i+1,split,key.getList());
    }

    private static Key getKey(String keyStr,List<Key> list){
        for (int i=0;i<list.size();i++){
            if(list.get(i).getK().equals(keyStr)){
                return list.get(i);
            }
        }
        return null;
    }

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧