java规则计算_亲属计算规则算法--java实现(关键算法摘要)
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实现(关键算法摘要)相关推荐
- 量子信息与量子计算_量子计算为23美分。
量子信息与量子计算 On Aug 13, 2020, AWS announced the General Availability of Amazon Braket. Braket is their ...
- mysql 规则引擎_为什么使用规则引擎?
一天,朱斯参加了一场code Review研讨会.会上的一群人正在讨论着如何对祖传代码进行变更,大家你一言,我一语,场面十分热闹! 突然,只见人群中的一个人满面愁容,说道:"昨天在项目中看到 ...
- java怎么运行_不要再问我Java程序是怎么执行的了!
什么是Java虚拟机? 要弄明白Java程序的执行过程首先要了解一下Java虚拟机. 虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机有自己完善的硬体架构 ...
- java coin介绍_代码示例中的Java 7:Project Coin
java coin介绍 该博客通过代码示例介绍了一些新的Java 7功能,这些项目在Project Coin一词下进行了概述. Project Coin的目标是向JDK 7添加一组小的语言更改.这些更 ...
- java arraylist排序_一文读懂Java集合框架
欢迎关注微信公众号:深入浅出Java源码 概念 Java集合框架为程序员提供了预先包装的数据结构和算法来操纵他们.集合框架被设计成要满足以下几个目标. 该框架必须是高性能的.基本集合(动态数组,链表, ...
- java 故障排查_目前最全的 Java 服务问题排查套路
问题分类: CPU问题 内存问题(GC问题.内存泄漏. OOM,Coredump 等) I/O问题 问题排查工具箱: 系统级别的工具: top:查看系统/进程cpu.内存.swap等资源占用情况的必备 ...
- java核心面试_不正确的核心Java面试答案
java核心面试 总览 在Internet上,Java面试问题和答案从一个网站复制到另一个网站. 这可能意味着错误或过时的答案可能永远不会得到纠正. 这是一些不太正确或已经过时的问题和答案. 即是Ja ...
- java 房贷计算器_求一房贷计算器java源程序
展开全部 打了个电话给农行的客服(收费的),终于知道公式了..好麻烦的公式...浪费了我15分钟的电话费. 还有在写公e68a84e8a2ad32313133353236313431303231363 ...
- java 比较器类_高级编程之(Java常用类(Java比较器))
1.使用背景: 说明:Java中的对象,正常情况下,只能进行比较 == 或 !=.不能使用 > 或 < 但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小. 如何 ...
- flex+java项目创建_创建Flex 4和Java Web应用程序
当前的Web技术对它们的需求不断增长. 他们必须能够管理用户帐户,上载内容和流视频. 这种需求要求RIA开发人员寻求简化开发工作流程的技术,同时提供常见的功能. 开发人员面临的挑战是选择正确的技术来提 ...
最新文章
- R语言广义加性模型(GAMs:Generalized Additive Model)建模:数据加载、划分数据、并分别构建线性回归模型和广义线性加性模型GAMs、并比较线性模型和GAMs模型的性能
- Intent传递对象
- CPU的制造过程及大致原理
- 大学计算机基础总结,大学计算机基础第二章总结
- 会话技术(Cookie Session)
- 关于jq easyui 刷新tabs的问题
- (前端)html与css css 15、标准文档流
- 传统开发被冲击得“七零八落”,云原生时代下开发者要如何自救?
- mysql 创建和查询数据库和表格
- 台服海岛纪元显示无法连接服务器,打开海岛纪元提示网络异常或者连接不上
- 【Spring-tx】spring事务和mybatis的联系
- project软件_Project软件操作篇——第三篇 优化计划
- Java Keytool工具简介
- 对话 NuCypher:如何安全地存储、共享和管理链上私人数据
- 随笔 | “郑秋冬”随想
- 数字报刊平台php,现代快报多媒体数字报刊平台
- 64位操作系统支持的最大内存
- 用nexus搭建maven私服(整合网上文章而成的)
- 分治策略时间复杂度计算
- 开源毕设项目《面向桂林旅游的APP软件设计与开发》