前言

问题描述

今天遇到一个关于集合的问题,觉得比较有趣,记录一下,这个问题是:定义一个用户类,至少包含姓名,年龄,生日,qq邮箱,初始化10个用户,利用String操作,提取qq到List集合中,姓名为英文的首字母转大写,生日格式化为 年月日 x时表示(x:子丑...)。对对象进行排序,根据生日从小到大排序.

解决方案

解决思路

  • 我们先初始化10个对象,并存入List集合中
  • 再new一个List集合为list1,遍历list集合,截取每个对象中的邮箱地址,存入list1集合
  • 用同样的方式截取list集合中的name、birthday、age、email拼接成一个新的字符串,new一个Map数组,birthday作为key,新的字符串作为value存入Map
  • 遍历这个Map数组,对HashMap的value进行排序

在这里我给大家看一下我的代码:

点击查看详细代码
import java.util.*;
import java.util.List; public class User {
public String name;
public int age;
public String birthday;
public String qqMailBox; public static void main(String[] args) {
List list = new ArrayList();
list.add("name: annie age: 12 birthday: 2009/03/05/03 qqMailBox: 2133221865@qq.com");
list.add("name: 狗剩 age: 13 birthday: 2010:01:05:05 qqMailBox: 2133281865@qq.com");
list.add("name: 翠花 age: 14 birthday: 2011:02:05:06 qqMailBox: 2133271865@qq.com");
list.add("name: 二狗 age: 14 birthday: 2011/03/05/02 qqMailBox: 2133251865@qq.com");
list.add("name: 旺财 age: 15 birthday: 2012:02:05:23 qqMailBox: 2133251865@qq.com");
list.add("name: 富贵 age: 12 birthday: 2009年01月05日19时 qqMailBox: 2133251865@qq.com");
list.add("name: saber age: 16 birthday: 2013/02/05/12 qqMailBox: 2133251865@qq.com");
list.add("name: 大力 age: 17 birthday: 2014年01月05日08时 qqMailBox: 2133251365@qq.com");
list.add("name: alger age: 18 birthday: 2015年03月05日15时 qqMailBox: 2133251465@qq.com");
list.add("name: 狗蛋 age: 19 birthday: 2016年03月05日23时 qqMailBox: 2133251845@qq.com"); //该集合用来存邮箱地址
List list1 = new ArrayList(); /**
*截取集合中的每个Object对象,存入List集合
*/
for(Object c : list){
//System.out.println(c);
String c1 = c.toString();
//获取最后一个:所在的位置
int index1 = c1.lastIndexOf(":");
String ss = c1.substring(index1 + 1);
list1.add(ss);
//System.out.println(ss);
}
System.out.println("提取qq到List集合中===>");
System.out.println(list1); /**
*截取所有属性,并排序
*/
System.out.println("排序后的Map数组===>");
for(Object o : list){
//截取name,若为英文首字母转大写
String s1 = o.toString();
int index1 = s1.indexOf("age");
int index2 = s1.indexOf("name:");
String s2 = s1.substring(index2 + 5, index1).trim();
//判断所有字符是否为英文
boolean result = s2.matches("[a-zA-Z]+");
String name = "";
//首字母转大写
if(result == true) {
String str2 = s2.substring(0, 1).toUpperCase() + s2.substring(1);
name = str2;
//System.out.println(str2);
}else {
//System.out.println(s2);
name = s2;
} //截取生日,格式化为 年月日 x时表示(x:子丑...)
int index3 = s1.indexOf("birthday");
int index4 = s1.indexOf("qqMailBox");
String s3 = s1.substring(index3 + 9, index4).trim();
//System.out.println(s3);
//获取所有数字
String str4 = "";
if(s3 != null && !"".equals(s3)){
for(int i = 0; i < s3.length(); i++){
if(s3.charAt(i) >= 48 && s3.charAt(i) <= 57){
str4 += s3.charAt(i);
}
}
}
//截取年月日时
String year = str4.substring(0, 4);
String month = str4.substring(4, 6);
String day = str4.substring(6, 8);
String time = str4.substring(8, 10);
//将String转为int
int time2 = Integer.parseInt(time);
String time3 = "";
if(time2 >= 0 && time2 < 2){
time3 = "子";
}else if(time2 >= 2 && time2 < 4){
time3 = "丑";
}else if(time2 >= 4 && time2 < 6){
time3 = "寅";
}else if(time2 >= 6 && time2 < 8){
time3 = "卯";
}else if(time2 >= 8 && time2 < 10){
time3 = "辰";
}else if(time2 >= 10 && time2 < 12){
time3 = "巳";
}else if(time2 >= 12 && time2 < 14){
time3 = "午";
}else if(time2 >= 14 && time2 < 16){
time3 = "未";
}else if(time2 >= 16 && time2 < 18){
time3 = "申";
}else if(time2 >= 18 && time2 < 20){
time3 = "酉";
}else if(time2 >= 20 && time2 < 22){
time3 = "戌";
}else if(time2 >= 22 && time2 < 24){
time3 = "亥";
};
//拼接生日
String birthday2 = year + "年" + month + "月" + day + "日" + time3 + "时";
//System.out.println(birthday2); //截取年龄
int index5 = s1.indexOf("age");
int index6 = s1.indexOf("birthday");
String s4 = s1.substring(index5 + 5, index6).trim();
//System.out.println(s4); //截取邮箱
int index7 = s1.indexOf("qqMailBox");
String s5 = s1.substring(index7 + 10).trim();
//System.out.println(s5); //将数据重新拼接后插入Map数组
Map map = new HashMap();
String key = str4;
String value = "name:" + " " + name + " " + "age:" + " " + s4 + " " + "birthday:" + " " + birthday2 + " " + "qqMailBox:" + " " + s5;
map.put(key, value);
//遍历时排序
map.forEach((key1, value1) -> {
//对HashMap的value进行排序
Object[] key_arr = map.keySet().toArray();
Arrays.sort(key_arr);
for (Object key2 : key_arr) {
Object value2 = map.get(key2);
}
System.out.print(key1 + "=" + value1 + " ===> ");
}); }
//System.out.println("按生日从小到排序===>" + set); } }

运行结果:

提取qq到List集合中===>
[ 2133221865@qq.com, 2133281865@qq.com, 2133271865@qq.com, 2133251865@qq.com, 2133251865@qq.com, 2133251865@qq.com, 2133251865@qq.com, 2133251365@qq.com, 2133251465@qq.com, 2133251845@qq.com]
排序后的Map数组===>
2009030503=name: Annie age: 12 birthday: 2009年03月05日丑时 qqMailBox: 2133221865@qq.com ===> 2010010505=name: 狗剩 age: 13 birthday: 2010年01月05日寅时 qqMailBox: 2133281865@qq.com ===> 2011020506=name: 翠花 age: 14 birthday: 2011年02月05日卯时 qqMailBox: 2133271865@qq.com ===> 2011030502=name: 二狗 age: 14 birthday: 2011年03月05日丑时 qqMailBox: 2133251865@qq.com ===> 2012020523=name: 旺财 age: 15 birthday: 2012年02月05日亥时 qqMailBox: 2133251865@qq.com ===> 2009010519=name: 富贵 age: 12 birthday: 2009年01月05日酉时 qqMailBox: 2133251865@qq.com ===> 2013020512=name: Saber age: 16 birthday: 2013年02月05日午时 qqMailBox: 2133251865@qq.com ===> 2014010508=name: 大力 age: 17 birthday: 2014年01月05日辰时 qqMailBox: 2133251365@qq.com ===> 2015030515=name: Alger age: 18 birthday: 2015年03月05日未时 qqMailBox: 2133251465@qq.com ===> 2016030523=name: 狗蛋 age: 19 birthday: 2016年03月05日亥时 qqMailBox: 2133251845@qq.com ===>
  • 集合框架排序

上文中最后一步是对Map集合中的key进行排序然后遍历出来

有关Java动态数组的一个小问题的更多相关文章

  1. Java动态数组

    其中java动态数组: Java动态数组是一种可以任意伸缩数组长度的对象,在Java中比较常用的是ArrayList,ArrayList是javaAPI中自带的java.util.ArrayList. ...

  2. 三 基于Java动态数组手写队列

    手写队列: package dataStucture2.stackandqueue; import com.lt.datastructure.MaxHeap.Queue; import dataStu ...

  3. java操作xml的一个小例子

    最近两天公司事比较多,这两天自己主要跟xml打交道,今天更一下用java操作xml的一个小例子. 原来自己操作xml一直用这个包:xstream-1.4.2.jar.然后用注解的方式,很方便,自己只要 ...

  4. Java动态代理:一个面包店的动态代理帝国

    文章首发于[博客园-陈树义],点击跳转到原文大白话说Java动态代理:一个面包店的动态代理帝国 代理模式是设计模式中非常重要的一种类型,而设计模式又是编程中非常重要的知识点,特别是在业务系统的重构中, ...

  5. 基于自定义的动态数组实现一个栈(Java语言)

    关于动态数组,参见我的上一篇关于动态数组的博文https://www.cnblogs.com/inu6/p/11717129.html 1.什么是栈? (1)只能从一端添加元素,也只能从一端取出元素, ...

  6. 常用数据结构-线性表及Java 动态数组 深究

    [Java心得总结六]Java容器中——Collection在前面自己总结的一篇博文中对Collection的框架结构做了整理,这里深究一下Java中list的实现方式 1.动态数组 In compu ...

  7. java连接mysql的一个小例子

    想要用java 连接数据库,需要在classpath中加上jdbc的jar包路径 在eclipse中,Project的properties里面的java build path里面添加引用 连接成功的一 ...

  8. java动态数组笔记

    动态数组: 在java.lang.reflect包下提供了Array类,包括一系列static方法,通过这些方法可动态的创建数组.给元素赋值.取出元素值等等 //理解数组引用——下面定义的objs数组 ...

  9. 二 基于java动态数组手写栈

    package dataStucture2.stack; import dataStucture2.array.MyDynamicArray; /** * 基于动态数组手写栈 * 设计时,栈中仅栈顶对 ...

随机推荐

  1. 啥是 MySQL 事务隔离级别?

    之前发过一篇文章,简单了解 MySQL 中相关的锁,里面提到了,如果我们使用的 MySQL 存储引擎为 InnoDB ,并且其事务隔离级别是 RR 可重复读的话,是可以避免幻读的. 但是没想到,都 1 ...

  2. 【洛谷P1061 Jam的计数法】搜索

    分析 超级暴力,在尾部+1,再判断. AC代码 type arr=array[0..27]of longint; var st:string; a:array[0..27]of longint; s, ...

  3. react native踩坑记录

    一 .安装 1.Python2 和Java SE Development Kit (JDK)可以直接通过腾讯电脑关键安装, Android SDK安装的时候路径里不能有中文和空格 2.配置java环境 ...

  4. .NET 6 预览版 5 发布

    很高兴.NET 6 预览版5终于跟大家见面了.我们现在正处于.NET 6 的后半部分,开始整合一些重要的功能. 例如.NET SDK 工作负载,它是我们.NET 统一愿景的基础,可以支持更多类型的应用 ...

  5. Python小白的数学建模课-10.微分方程边值问题

    小白往往听到微分方程就觉得害怕,其实数学建模中的微分方程模型不仅没那么复杂,而且很容易写出高水平的数模论文. 本文介绍微分方程模型边值问题的建模与求解,不涉及算法推导和编程,只探讨如何使用 Pytho ...

  6. ORACLE ORA-00933: SQL 命令未正确结束,

    这个错误害我花了一天时间排查,最后原来是因为结束符,这种语句不能是分号,将分号即可执行成功. MERGE INTO MO_TRADE_COUNT_DAY A USING ( SELECT MAX(fl ...

  7. 一文彻底搞清 Gradle 依赖【转】

    来源:曾是放牛娃 www.jianshu.com/p/59fd653a54d2 转自:https://mp.weixin.qq.com/s?__biz=MzA3MDMyMjkzNg==&mid ...

  8. sort,uniq,tr,cut,eval命令

    目录 一.排序命令sort 1.格式 2.常用选项 3.例子 二.去除重复行操作命令uniq 1.格式 2.常用选项 3.示例 三.字符转换命令tr 1.格式 2.常用选项 3.参数 4.示例 四.数 ...

  9. 【数据结构与算法】字符串匹配(Rabin-Karp 算法和KMP 算法)

    Rabin-Karp 算法 概念 用于在 一个字符串 中查找 另外一个字符串 出现的位置. 与暴力法不同,基本原理就是比较字符串的 哈希码 ( HashCode ) , 快速的确定子字符串是否等于被查 ...

  10. gRPC学习之一:在CentOS7部署和设置GO

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...