package com.zifamily.zfapp.sns;

import org.apache.commons.collections.CollectionUtils;

import org.junit.Before;

import org.junit.Test;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.stream.Collectors;

/**

* 家人关系推算

* @author QYF

* @Title: RoleReckonTest

* @Date: 2018/12/14 11:48

*/

public class RoleReckonTest {

//【关系】f:父,m:母,h:夫,w:妻,s:子,d:女

//【修饰符】 1:男性,0:女性

public HashMap roleMap=new HashMap();

/**

* 角色性别 1--男性 ;0--女性

*/

public HashMap roleSex=new HashMap();

/**

* 角色反转

*/

public HashMap roleRef=new HashMap();

@Before

public void addData(){

// roleMap.put("jr","家人");

roleMap.put("f,f","爷爷");

roleMap.put("f,m","奶奶");

roleMap.put("m,f","外公");

roleMap.put("m,m","外婆");

roleMap.put("f","爸爸");

roleMap.put("m","妈妈");

roleMap.put("h,f","公公");

roleMap.put("h,m","婆婆");

roleMap.put("w,f","岳父");

roleMap.put("w,m","岳母");

roleMap.put("f,ob","伯父");

roleMap.put("f,ob,w","伯母");

roleMap.put("f,lb","叔叔");

roleMap.put("f,lb,w","婶婶");

roleMap.put("f,os","姑母"); //????

roleMap.put("f,ls","姑姐"); //????

roleMap.put("f,xs,h","姑丈"); //????

roleMap.put("m,ob","大舅");

roleMap.put("m,ob,w","大舅妈");

roleMap.put("m,lb","小舅");

roleMap.put("m,lb,w","小舅妈");

roleMap.put("m,os","大姨");

roleMap.put("m,os,h","大姨父");

roleMap.put("m,ls","小姨");

roleMap.put("m,ls,h","小姨父");

roleMap.put("ob","哥哥");

roleMap.put("os","姐姐");

roleMap.put("lb","弟弟");

roleMap.put("ls","妹妹");

roleMap.put("ob,w","嫂子");

roleMap.put("lb,w","弟妹");

roleMap.put("os,h","姐夫");

roleMap.put("ls,h","妹夫");

roleMap.put("f,xb,s&o","堂哥"); //解析?

roleMap.put("f,xb,d&o","堂姐"); //解析?

roleMap.put("f,xb,d&l","堂妹");

roleMap.put("f,xb,s&l","堂弟");

roleMap.put("f,xs,s&o","表哥"); //姑表哥

roleMap.put("m,xb,s&o","表哥"); //舅表哥

roleMap.put("m,xs,s&o","表哥"); //姨表哥

roleMap.put("m,xb,d&o","表姐"); //舅表姐

roleMap.put("m,xs,d&o","表姐"); //姨表姐

roleMap.put("f,xs,d&o","表姐"); //姑表姐

roleMap.put("f,xs,s&l","表弟"); //姑表弟

roleMap.put("m,xb,s&l","表弟"); //舅表弟

roleMap.put("m,xs,s&l","表弟"); //姨表弟

roleMap.put("m,xb,d&l","表妹"); //舅表妹

roleMap.put("m,xs,d&l","表妹"); //姨表妹

roleMap.put("f,xs,d&l","表妹"); //姑表妹

roleMap.put("h","老公");

roleMap.put("h,ob","大伯子");

roleMap.put("h,lb","小叔子");

roleMap.put("h,os","大姑子");

roleMap.put("h,ls","小姑子");

roleMap.put("h,ob,w","大婶子");

roleMap.put("h,lb,w","小婶子");

roleMap.put("h,os,h","大姑夫"); //大姑子的老公?

roleMap.put("h,ls,h","小姑夫"); //小姑子的老公?

roleMap.put("w","老婆");

roleMap.put("w,ob","大舅子");

roleMap.put("w,lb","小舅子");

roleMap.put("w,os","大姨子");

roleMap.put("w,ls","小姨子");

roleMap.put("w,ob,w","舅嫂");

roleMap.put("w,lb,w","舅弟媳");

roleMap.put("w,os,h","大姨夫");

roleMap.put("w,ls,h","小姨夫");

roleMap.put("s,w,f","亲家公");

roleMap.put("s,w,m","亲家母");

roleMap.put("d,h,f","亲家公");

roleMap.put("d,h,m","亲家母");

roleMap.put("s","儿子");

roleMap.put("d","女儿");

roleMap.put("s,w","儿媳");

roleMap.put("d,h","女婿");

roleMap.put("xb,s","侄子");

roleMap.put("xb,d","侄女");

roleMap.put("xs,s","外甥");

roleMap.put("xs,d","外甥女");

roleMap.put("w,xb,s","内侄");

roleMap.put("w,xb,d","内侄女");

roleMap.put("w,xs,s","内甥");

roleMap.put("w,xs,d","姨甥女");

roleMap.put("h,xb,s","婆家侄");

roleMap.put("h,xb,d","婆家侄");

roleMap.put("h,xs,s","婆家甥");

roleMap.put("h,xs,d","婆家甥");

roleMap.put("s,s","孙子");

roleMap.put("s,d","孙女");

roleMap.put("d,s","外孙");

roleMap.put("d,d","外孙女");

roleMap.put("s,d,h","孙女婿");

roleMap.put("s,s,w","孙媳妇");

roleMap.put("d,d,h","外孙女婿");

roleMap.put("d,s,w","外孙媳");

inint();

}

@Test

public void reckon(){

String roleName="w,lb";

String sex ="1";

ArrayList roles = new ArrayList<>();

if (sex.equals("-1")){

ArrayList roles1 = reckon1(roleName, "1");

ArrayList roles0 = reckon1(roleName, "0");

roles.addAll(roles1);

roles.addAll(roles0);

roles = roles.stream().distinct().collect(Collectors.toCollection(ArrayList::new));

}else {

roles = reckon1(roleName, sex);

}

if (CollectionUtils.isEmpty(roles)){

System.out.println("不知道你俩什么关系");

}else {

if(roles.size()==1){

String roleName1 = roleMap.get(roles.get(0));

if (roleName1==null){

String newStr=null;

if (roles.get(0).contains("lb")){

newStr=roles.get(0).replace("lb","xb");

}

if (roles.get(0).contains("ob")){

newStr=roles.get(0).replace("ob","xb");

}

if (roles.get(0).contains("ls")){

newStr=roles.get(0).replace("ls","xs");

}

if (roles.get(0).contains("os")){

newStr=roles.get(0).replace("os","xs");

}

System.out.println(roleMap.get(newStr));

}

System.out.println(roleName1);

}else {

roles.forEach((role)->{

System.out.println(role+"-->"+roleMap.get(role));

});

}

}

}

public ArrayList reckon1(String roleName, String sex){

ArrayList list = new ArrayList<>();

StringBuffer sb = new StringBuffer();

if (roleName.contains("s&o")){

roleName=roleName.replace("&o","&l");

if (sex.equals("0")){

roleName= roleName.replace("s&","d&");

}else if (sex.equals("-1")){

String s = new String(roleName);

s=s.replace("s&","d&");

list.add(s);

}

list.add(roleName);

return list;

}

if (roleName.contains("d&o")){

roleName=roleName.replace("&o","&l");

if (sex.equals("1")){

roleName = roleName.replace("d&","s&");

}else if (sex.equals("-1")){

String s = new String(roleName);

s=s.replace("d&","s&");

list.add(s);

}

list.add(roleName);

return list;

}

if (roleName.contains("d&l")){

roleName=roleName.replace("&l","&o");

if (sex.equals("1")){

roleName = roleName.replace("d&","s&");

}else if (sex.equals("-1")){

String s = new String(roleName);

s=s.replace("d&","s&");

list.add(s);

}

list.add(roleName);

return list;

}

if (roleName.contains("s&l")){

roleName=roleName.replace("&l","&o");

if (sex.equals("0")){

roleName=roleName.replace("s&","d&");

}else if (sex.equals("-1")){

String s = new String(roleName);

s=s.replace("s&","d&");

list.add(s);

}

list.add(roleName);

return list;

}

String[] split = roleName.split(",");

for (int i = split.length-1; i >=0 ; i--) {

// mark1="d,s"

String mark1 = roleRef.get(split[i]);

/**

* 最后一次根据"我"的性别判断

*/

if (i==0){

String s = reckon2(mark1, sex);

String mark = sb.append(s).toString();

list.add(mark);

if (mark.contains("xb")){

String s1 = new String(mark);

mark= mark.replace("xb","ob");

list.add(mark);

s1=s1.replace("xb","lb");

list.add(s1);

}else if (mark.contains("xs")){

String s1 = new String(mark);

mark= mark.replace("xs","os");

list.add(mark);

s1=s1.replace("xs","ls");

list.add(s1);

}

}else {

String s2 = roleSex.get(split[i -1]);

String mark2 = reckon2(mark1, s2);

/* if ((mark2.equals("ob")||mark2.equals("lb"))){

mark2="xb";

}

if ((mark2.equals("os")||mark2.equals("ls"))){

mark2="xs";

}*/

sb.append(mark2+",");

}

}

// list=list.stream().distinct().collect(Collectors.toCollection(ArrayList::new));

return list;

}

public String reckon2(String mark1,String sex){

String[] split1 = mark1.split(",");

String result=null;

if (split1.length==1){

result=split1[0];

}else {

for (int i = 0; i < split1.length; i++) {

if (roleSex.get(split1[i]).equals(sex)){

result=split1[i];

break;

}

}

}

return result;

}

private void inint() {

//【修饰符】 1:男性,0:女性,&o:年长,&l:年幼,#:隔断,[a|b]:并列

roleSex.put("jr","-1");

roleSex.put("f,f","1");

roleSex.put("f,m","0");

roleSex.put("m,f","1");

roleSex.put("m,m","0");

roleSex.put("f","1");

roleSex.put("m","0");

roleSex.put("h,f","1");

roleSex.put("h,m","0");

roleSex.put("w,f","1");

roleSex.put("w,m","0");

roleSex.put("f,ob","1");

roleSex.put("f,ob,w","0");

roleSex.put("f,lb","1");

roleSex.put("f,lb,w","0");

roleSex.put("f,os","0"); //????

roleSex.put("f,ls","0"); //????

roleSex.put("f,xs,h","1"); //????

roleSex.put("m,ob","1");

roleSex.put("m,ob,w","0");

roleSex.put("m,lb","1");

roleSex.put("m,lb,w","0");

roleSex.put("m,os","0");

roleSex.put("m,os,h","1");

roleSex.put("m,ls","0");

roleSex.put("m,ls,h","1");

roleSex.put("ob","1");

roleSex.put("os","0");

roleSex.put("lb","1");

roleSex.put("ls","0");

roleSex.put("ob,w","0");

roleSex.put("lb,w","0");

roleSex.put("os,h","1");

roleSex.put("ls,h","1");

roleSex.put("f,xb,s&o","1"); //解析?

roleSex.put("f,xb,d&o","0"); //解析?

roleSex.put("f,xb,d&l","0");

roleSex.put("f,xb,s&l","1");

roleSex.put("f,xs,s&o","1"); //姑表哥

roleSex.put("m,xb,s&o","1"); //舅表哥

roleSex.put("m,xs,s&o","1"); //姨表哥

roleSex.put("m,xb,d&o","0"); //舅表姐

roleSex.put("m,xs,d&o","0"); //姨表姐

roleSex.put("f,xs,d&o","0"); //姑表姐

roleSex.put("f,xs,s&l","1"); //姑表弟

roleSex.put("m,xb,s&l","1"); //舅表弟

roleSex.put("m,xs,s&l","1"); //姨表弟

roleSex.put("m,xb,d&l","0"); //舅表妹

roleSex.put("m,xs,d&l","0"); //姨表妹

roleSex.put("f,xs,d&l","0"); //姑表妹

roleSex.put("h","1");

roleSex.put("h,ob","1");

roleSex.put("h,lb","1");

roleSex.put("h,os","0");

roleSex.put("h,ls","0");

roleSex.put("h,ob,w","0");

roleSex.put("h,lb,w","0");

roleSex.put("h,os,h","1"); //大姑子的老公?

roleSex.put("h,ls,h","1"); //小姑子的老公?

roleSex.put("w","0");

roleSex.put("w,ob","1");

roleSex.put("w,lb","1");

roleSex.put("w,os","0");

roleSex.put("w,ls","0");

roleSex.put("w,ob,w","0");

roleSex.put("w,lb,w","0");

roleSex.put("w,os,h","1");

roleSex.put("w,ls,h","1");

roleSex.put("s,w,f","1");

roleSex.put("s,w,m","0");

roleSex.put("d,h,f","1");

roleSex.put("d,h,m","0");

roleSex.put("s","1");

roleSex.put("d","0");

roleSex.put("s,w","0");

roleSex.put("d,h","1");

roleSex.put("xb,s","1");

roleSex.put("cb,d","0");

roleSex.put("xs,s","1");

roleSex.put("xs,d","0");

roleSex.put("w,xb,s","1");

roleSex.put("w,xb,d","0");

roleSex.put("w,xs,s","1");

roleSex.put("w,xs,d","0");

roleSex.put("h,xb,s","1");

roleSex.put("h,xs,s","1");

roleSex.put("s,s","1");

roleSex.put("s,d","0");

roleSex.put("d,s","1");

roleSex.put("d,d","0");

roleSex.put("s,d,h","1");

roleSex.put("s,s,w","0");

roleSex.put("d,d,h","1");

roleSex.put("d,s,w","0");

roleSex.put("xb","1");

roleSex.put("xs","0");

//【关系】f:父,m:母,h:夫,w:妻,s:子,d:女,xb:兄弟,ob:兄,lb:弟,xs:姐妹,os:姐,ls:妹

roleRef.put("f","d,s");

roleRef.put("m","d,s");

roleRef.put("h","w");

roleRef.put("w","h");

roleRef.put("s","m,f");

roleRef.put("d","m,f");

roleRef.put("lb","os,ob");

roleRef.put("ob","ls,lb");

roleRef.put("xb","xs,xb");

roleRef.put("ls","os,ob");

roleRef.put("os","ls,lb");

roleRef.put("xs","xs,xb");

roleRef.put("s&o","d&l,s&l");

roleRef.put("d&o","d&l,s&l");

roleRef.put("d&l","s&o,d&o");

roleRef.put("s&l","s&o,d&o");

}

public void test1(String roleName,String sex){

ArrayList roles = new ArrayList<>();

if (sex.equals("-1")){

ArrayList roles1 = reckon1(roleName, "1");

ArrayList roles0 = reckon1(roleName, "0");

roles.addAll(roles1);

roles.addAll(roles0);

roles = roles.stream().distinct().collect(Collectors.toCollection(ArrayList::new));

}else {

roles = reckon1(roleName, sex);

}

if (CollectionUtils.isEmpty(roles)){

System.out.println("不知道你俩什么关系");

}else {

if(roles.size()==1){

String roleName1 = roleMap.get(roles.get(0));

if (roleName1==null){

String newStr=null;

if (roles.get(0).contains("lb")){

newStr=roles.get(0).replace("lb","xb");

}

if (roles.get(0).contains("ob")){

newStr=roles.get(0).replace("ob","xb");

}

if (roles.get(0).contains("ls")){

newStr=roles.get(0).replace("ls","xs");

}

if (roles.get(0).contains("os")){

newStr=roles.get(0).replace("os","xs");

}

System.out.println(roleMap.get(newStr));

}

System.out.println(roleName1);

}else {

roles.forEach((role)->{

System.out.println(role+"-->"+roleMap.get(role));

});

}

}

}

@Test

public void test2(){

roleMap.forEach((k,v)->{

test1(k,"1");

});

}

}

java规则计算_亲属计算规则算法--java实现(关键算法摘要)相关推荐

  1. 量子信息与量子计算_量子计算为23美分。

    量子信息与量子计算 On Aug 13, 2020, AWS announced the General Availability of Amazon Braket. Braket is their ...

  2. mysql 规则引擎_为什么使用规则引擎?

    一天,朱斯参加了一场code Review研讨会.会上的一群人正在讨论着如何对祖传代码进行变更,大家你一言,我一语,场面十分热闹! 突然,只见人群中的一个人满面愁容,说道:"昨天在项目中看到 ...

  3. java怎么运行_不要再问我Java程序是怎么执行的了!

    什么是Java虚拟机? 要弄明白Java程序的执行过程首先要了解一下Java虚拟机. 虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机有自己完善的硬体架构 ...

  4. java coin介绍_代码示例中的Java 7:Project Coin

    java coin介绍 该博客通过代码示例介绍了一些新的Java 7功能,这些项目在Project Coin一词下进行了概述. Project Coin的目标是向JDK 7添加一组小的语言更改.这些更 ...

  5. java arraylist排序_一文读懂Java集合框架

    欢迎关注微信公众号:深入浅出Java源码 概念 Java集合框架为程序员提供了预先包装的数据结构和算法来操纵他们.集合框架被设计成要满足以下几个目标. 该框架必须是高性能的.基本集合(动态数组,链表, ...

  6. java 故障排查_目前最全的 Java 服务问题排查套路

    问题分类: CPU问题 内存问题(GC问题.内存泄漏. OOM,Coredump 等) I/O问题 问题排查工具箱: 系统级别的工具: top:查看系统/进程cpu.内存.swap等资源占用情况的必备 ...

  7. java核心面试_不正确的核心Java面试答案

    java核心面试 总览 在Internet上,Java面试问题和答案从一个网站复制到另一个网站. 这可能意味着错误或过时的答案可能永远不会得到纠正. 这是一些不太正确或已经过时的问题和答案. 即是Ja ...

  8. java 房贷计算器_求一房贷计算器java源程序

    展开全部 打了个电话给农行的客服(收费的),终于知道公式了..好麻烦的公式...浪费了我15分钟的电话费. 还有在写公e68a84e8a2ad32313133353236313431303231363 ...

  9. java 比较器类_高级编程之(Java常用类(Java比较器))

    1.使用背景: 说明:Java中的对象,正常情况下,只能进行比较 == 或 !=.不能使用 > 或 < 但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小. 如何 ...

  10. flex+java项目创建_创建Flex 4和Java Web应用程序

    当前的Web技术对它们的需求不断增长. 他们必须能够管理用户帐户,上载内容和流视频. 这种需求要求RIA开发人员寻求简化开发工作流程的技术,同时提供常见的功能. 开发人员面临的挑战是选择正确的技术来提 ...

最新文章

  1. R语言广义加性模型(GAMs:Generalized Additive Model)建模:数据加载、划分数据、并分别构建线性回归模型和广义线性加性模型GAMs、并比较线性模型和GAMs模型的性能
  2. Intent传递对象
  3. CPU的制造过程及大致原理
  4. 大学计算机基础总结,大学计算机基础第二章总结
  5. 会话技术(Cookie Session)
  6. 关于jq easyui 刷新tabs的问题
  7. (前端)html与css css 15、标准文档流
  8. 传统开发被冲击得“七零八落”,云原生时代下开发者要如何自救?
  9. mysql 创建和查询数据库和表格
  10. 台服海岛纪元显示无法连接服务器,打开海岛纪元提示网络异常或者连接不上
  11. 【Spring-tx】spring事务和mybatis的联系
  12. project软件_Project软件操作篇——第三篇 优化计划
  13. Java Keytool工具简介
  14. 对话 NuCypher:如何安全地存储、共享和管理链上私人数据
  15. 随笔 | “郑秋冬”随想
  16. 数字报刊平台php,现代快报多媒体数字报刊平台
  17. 64位操作系统支持的最大内存
  18. 用nexus搭建maven私服(整合网上文章而成的)
  19. 分治策略时间复杂度计算
  20. 开源毕设项目《面向桂林旅游的APP软件设计与开发》

热门文章

  1. leetcode LCP 03. 机器人大冒险
  2. 反垃圾邮件黑名单申诉工作相关步骤说明
  3. 爬虫实战(三)----使用百度API获取经纬度/地址
  4. 企业使用it人力外包可以解决哪些问题
  5. WIFI类物联网产品配网方式简述
  6. 公网ip和域名是干嘛的?域名由谁管理的?
  7. Latex中thebibliography后面的数字的含义
  8. python 实现汇率兑换程序
  9. ASP,PHP,ASPX生成静态页大全
  10. python嗅探器_Python中的包嗅探器