该demo旨在创建一个基础的联系人管理系统:类似手机中的通讯录,做到联系人分类和排序,并可添加联系人
需创建4个类:
①Person:用于保存联系人,其中需要实现Comparable接口用于联系人排序
public class Person implements Comparable{
String firstAlpha;
String name;
public Person(String firstAlpha, String name) {
this.firstAlpha = firstAlpha;
this.name = name;
}
@Override
public int compareTo(Person person) {
return firstAlpha.compareTo(person.firstAlpha);
}
}
②Contact:联系人的整体框架方法及对应逻辑,其中联系人首字母与联系人通过键值对联系
public class Contact {
ArrayList titles; //保存每个联系人栏目的标题
Map> contacts; //保存每个栏目
public Contact() {
//初始化数组
titles = new ArrayList<>();
contacts = new HashMap<>();
}
//显示联系人信息
public void showList(){
for(String title :titles){
//打印该栏目的标题
System.out.println(title);
//获取该栏目的联系人列表
List lists = contacts.get(title);
for(Person p:lists){
System.out.println(p.name);
}
}
}
//添加联系人
public void addPerson(Person person){
//获取person对应的首字母
String title = person.firstAlpha.substring(0,1);
//判断当前栏目中是否有该person的首字母
if(titles.contains(title)){
//已有,获取栏目对应列表
List lists = contacts.get(title);
//添加
lists.add(person);
//排序
Collections.sort(lists);
}else{
//没有该栏目
//在标题数组中添加
titles.add(title);
//标题数组排序
Collections.sort(titles);
//添加键值对
List lists = new ArrayList<>();
lists.add(person);
contacts.put(title,lists);
}
}
}
③Util:包括 将汉字转化为拼音和是否继续 两种方法
public class Util {
//将汉字转化为拼音
public static String getFirstAlpha(String str){
StringBuilder sb = new StringBuilder();//保存所有首字母
char[] chars = str.toCharArray(); //将字符串转化为字符数组
//输出格式
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
//设置大小写
format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
for(char ch :chars) {
//判断是否是汉字
if(ch > 128) {
//转化
try {
String[] strings = PinyinHelper.toHanyuPinyinStringArray(ch, format);
//获取汉字拼音首字母
sb.append(strings[0].charAt(0));
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
}else{//非汉字,无需转化
sb.append(ch);
}
}
return sb.toString();
}
//是否继续
public static boolean isContinue(){
Scanner scanner = new Scanner(System.in);
while (true){
System.out.print("是否继续?(1.继续,2:退出)");
int result = scanner.nextInt();
if(result == 1){
return true;
}else if (result == 2){
return false;
}else {
System.out.print("输入格式错误,请重新输入。");
}
}
}
}
④MyClass:主类,程序整体逻辑
public class MyClass {
public static void main(String[] args){
Contact contact = new Contact();//创建界面
Scanner scanner = new Scanner(System.in);
while (true){
System.out.print("请输入联系人姓名:");
String name = scanner.next();
//将汉字姓名转化为拼音
String firstAlpha = Util.getFirstAlpha(name);
System.out.println(firstAlpha);
//创建person
Person person = new Person(firstAlpha,name);
//添加联系人
contact.addPerson(person);
//是否继续
if(!Util.isContinue()){
break;
}
}
contact.showList();
}
}