import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
//如何处理文件
//
// child parent
// zhangsan xiaoming
// 小明 明爸
// 小明 明妈
// 明儿 小明
// 明女 小明
//
public class HandleFile1 {
private static class Person
{
public String name="";
public Person(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
List<Person> parents=new ArrayList<Person>();
public void addParent(Person parent)
{
parents.add(parent);
}
public List<Person> getParent()
{
return parents;
}
public int setparentsize()
{
return parents.size();
}
List<Person> childs=new ArrayList<Person>();
public void addChild(Person parent)
{
childs.add(parent);
}
public List<Person> getChilds()
{
return childs;
}
public int setchildssize()
{
return childs.size();
}
}
/**
* 查看列表中是否有one1这个人,使用递归,
* @param one1
*/
public static Person getperson(Person one1,String name)
{
// if(name.equals("明爸"))
// {
// System.out.println("123");
// }
if(one1.name.equals(name))//如果查找的是当前的人
{
return one1;
}
if(one1.getChilds().size()>0)//查找当前人的孩子
{
Person t=findchild1(one1,name,"","");
if(t!=null)
{
return t;
}
}
if(one1.getParent().size()>0)//查找当前人的父母
{
return findparent1(one1,name,"","");
}
return null;
}
/**
*
* @param child
* @param name
* @param names
* fa
* ch
* @return
*/
public static Person findchild1(Person p,String name,String fa,String ch)//遍历所有的儿子
{
for(int i=0;i<p.getChilds().size();i++)//遍历他所有的儿子
{//c-(fa)c-(ch)p
if(!((Person)p.getChilds().get(i)).getName().equals(ch))//p所有的孩子名称都不等于ch(他的传入孩子)
{
if(((Person) p.getChilds().get(i)).getName().equals(name))//找到相同
{
return ((Person) p.getChilds().get(i));
}//没找到,但是他的孩子的孩子数量大于0 p-c-p
else if((p.getChilds().get(i)).getChilds().size()>0)
{
Person p_Model=findchild1(p.getChilds().get(i),name,"",p.getName());//若果返回null没有找到
if(p_Model!=null)
{
return p_Model;
}
}
else if(((p.getChilds().get(i))).getParent().size()>0)没找到,但是他的孩子的父亲的数量大于0 c-p-c
{
Person p_Model=findparent1(p.getChilds().get(i),name,p.getName(),"");//若果返回null没有找到
if(p_Model!=null)
{
return p_Model;
}
}
}
}
return null;
}
public static Person findparent1(Person p,String name,String fa,String ch)//遍历所有的儿子
{
for(int i=0;i<p.getParent().size();i++)//遍历他所有的父亲
{//c-(fa)p-(ch)c
if(!((Person)p.getParent().get(i)).getName().equals(fa))//p所有的父亲名称都不等于ch(他的传入孩子)
{
if(((Person) p.getParent().get(i)).getName().equals(name))//找到相同
{
return ((Person) p.getParent().get(i));
}//没找到,但是他的孩子的孩子数量大于0 c-p-c
else if((p.getParent().get(i)).getChilds().size()>0)
{
Person p_Model=findchild1(p.getParent().get(i),name,"",p.getName());//若果返回null没有找到
if(p_Model!=null)
{
return p_Model;
}
}
else if((p.getParent().get(i)).getParent().size()>0)//c-p-p不需要传参数 p-p-c,需要传参
{
Person p_Model=findparent1(p.getParent().get(i),name,p.getName(),"");//若果返回null没有找到
if(p_Model!=null)
{
return p_Model;
}
}
}
}
return null;
}
public static void main(String[] args) {
String infos []=new String[]{"child parent","zhangsan xiaoming","小明 明爸","小明 明妈",
"明儿 小明","明女 小明","明爸 明爷","明孙 明女"};
// String infos []=new String[]{"child parent","zhangsan xiaoming","小明 明爸","小明 明妈",
// "明儿 小明","明女 小明"};
List<Person> list=new ArrayList<Person>();
Person one=null;
for(int i=0;i<infos.length;i++)
{
String []names=infos[i].split(" ");
//这套流程下来会把用户信息都添加成功!接下来就是遍历对象了,输出父子类了
if(names[0].compareTo("child")!=0)
{
//首先查看列表中是否有该名称,2检查列表中的对象是否有该名称,3添加新信息
if(list.size()>0)
{
for(int z=0;z<list.size();z++)
{
Person one1=list.get(z);//获取列表中的家族对象
if(one1.name.equals(names[0]))//等与当前循环家族
{
Person p2=new Person(names[1]);
//如果有该父亲,不添加
p2=findparent1(one1, names[1],"","");
if(p2==null)
{
one1.addParent(new Person(names[1]));
//也反向添加信息
for(int a=0;a<one1.getParent().size();a++)
{
if(one1.getParent().get(a).getName()==names[1])
{
one1.getParent().get(a).addChild(one1);
}
}
break;
}
break;
}
else if(one1.name.equals(names[1]))//查看是否与父类名称相同,是否添加孩子
{
Person p2=new Person(names[0]);
//System.out.println(one1.getChilds().size());
//System.out.println(one1.getChilds().get(0).getName());
p2=findchild1(one1,names[0],"","");
if(p2==null)
{
p2=new Person(names[0]);
one1.addChild(p2);
//也反向添加信息
for(int a=0;a<one1.getChilds().size();a++)
{
if(one1.getChilds().get(a).getName()==names[0])
{
one1.getChilds().get(a).addParent(one1);
}
}
}
break;
}
//上面时子类对象添加父类,下面时父类对象添加子类对象
Person p=getperson(one1,names[0]);//寻找子对象
Person pp=getperson(one1,names[1]);//寻找父对象的方法
if(p!=null)
{
Person fa=new Person(names[0]);
p.addParent(fa);
//也反向添加信息
for(int a=0;a<p.getParent().size();a++)
{
if(p.getParent().get(a).getName()==names[1])
{
p.getParent().get(a).addChild(p);
}
}
}
else if(pp!=null)//寻找父对象
{
Person son=new Person(names[0]);
pp.addChild(son);
//也反向添加信息
for(int a=0;a<pp.getChilds().size();a++)
{
if(pp.getChilds().get(a).getName()==names[0])
{
pp.getChilds().get(a).addParent(pp);
}
}
}
else if(z==list.size()-1)
{
Person p1=new Person(names[0]);//添加一个独立的家族
p1.addParent(new Person(names[1]));
///###
//也反向添加信息
for(int a=0;a<p1.getParent().size();a++)
{
if(p1.getParent().get(a).getName()==names[1])
{
p1.getParent().get(a).addChild(p1);
}
}
list.add(p1);
break;
}
}
}
else//第一次添加信息
{
one=new Person(names[0]);
Person one_p=new Person(names[1]);
one_p.addChild(one);
one.addParent(one_p);
list.add(one);
}
}
}
// //现阶段已经完成根据根据儿子添加父亲,现在要求根据父亲添加儿子,双方添加都已完成,下面需要寻找爷孙备份关系关系
for(int i=0;i<list.size();i++)
{
down(list.get(i));//
}
}
public static Person down(Person p)//查找一个人的子辈是否有
{
if(p.getChilds().size()==0)//如果Person没有儿子了,返回空,从底层向上层查找,查找到,所有底层的
{
//System.out.println(p.getName());
print(p);
return null;
}
else
{
List<Person> l=p.getChilds();
for(int i=0;i<l.size();i++)
{
down((Person)l.get(i));
}
}
return p;
}
static List<Map<String,String>> ll=new ArrayList<Map<String,String>>();
//打印爷孙信息
public static void print(Person p)
{
if(p.getParent().size()==0)
{
return;
}
if(p.getParent().size()>0)
{
List<Person> se=p.getParent();
for(int i=0;i<se.size();i++)//遍历父类的每一个元素
{
if(se.get(i).getParent().size()>0)
{
/**
* se1 是某个人的父亲
* **/
List<Person> se1=se.get(i).getParent();
for(int z=0;z<se1.size();z++)//遍历爷爷被的每一个元素
{
boolean isExists=false;
for(Map<String,String> map:ll)//遍历每个爷孙信息
{
Iterator<String> iter =map.keySet().iterator();
while(iter.hasNext())
{
String name=iter.next();
String value=map.get(name);
if(name.equals(p.getName())&&se1.get(z).getName().equals(value))
{
isExists=true;//判断该爷孙信息已经存在
}
//System.out.println(name+"\t:\t"+value);
}
}
if(isExists==false)//列表中是否存在
{
Map<String,String> m=new HashMap<String,String>();
m.put(p.getName(),se1.get(z).getName());
System.out.println("孙:"+p.getName()+"\t爷:"+se1.get(z).getName());
ll.add(m);
}
}
}
}
for(int i=0;i<se.size();i++)//打印元素父类的元素的爷孙
{
print(se.get(i));
}
}
}
}
[eclipse运行结果]
居中的图片:
转载请声明出处!–https://blog.csdn.net/weixin_43949943/article/details/88552460 某某i表叔: