有关Java动态数组的一个小问题
前言
问题描述
今天遇到一个关于集合的问题,觉得比较有趣,记录一下,这个问题是:定义一个用户类,至少包含姓名,年龄,生日,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动态数组的一个小问题的更多相关文章
- Java动态数组
		
其中java动态数组: Java动态数组是一种可以任意伸缩数组长度的对象,在Java中比较常用的是ArrayList,ArrayList是javaAPI中自带的java.util.ArrayList. ...
 - 三 基于Java动态数组手写队列
		
手写队列: package dataStucture2.stackandqueue; import com.lt.datastructure.MaxHeap.Queue; import dataStu ...
 - java操作xml的一个小例子
		
最近两天公司事比较多,这两天自己主要跟xml打交道,今天更一下用java操作xml的一个小例子. 原来自己操作xml一直用这个包:xstream-1.4.2.jar.然后用注解的方式,很方便,自己只要 ...
 - Java动态代理:一个面包店的动态代理帝国
		
文章首发于[博客园-陈树义],点击跳转到原文大白话说Java动态代理:一个面包店的动态代理帝国 代理模式是设计模式中非常重要的一种类型,而设计模式又是编程中非常重要的知识点,特别是在业务系统的重构中, ...
 - 基于自定义的动态数组实现一个栈(Java语言)
		
关于动态数组,参见我的上一篇关于动态数组的博文https://www.cnblogs.com/inu6/p/11717129.html 1.什么是栈? (1)只能从一端添加元素,也只能从一端取出元素, ...
 - 常用数据结构-线性表及Java 动态数组 深究
		
[Java心得总结六]Java容器中——Collection在前面自己总结的一篇博文中对Collection的框架结构做了整理,这里深究一下Java中list的实现方式 1.动态数组 In compu ...
 - java连接mysql的一个小例子
		
想要用java 连接数据库,需要在classpath中加上jdbc的jar包路径 在eclipse中,Project的properties里面的java build path里面添加引用 连接成功的一 ...
 - java动态数组笔记
		
动态数组: 在java.lang.reflect包下提供了Array类,包括一系列static方法,通过这些方法可动态的创建数组.给元素赋值.取出元素值等等 //理解数组引用——下面定义的objs数组 ...
 - 二 基于java动态数组手写栈
		
package dataStucture2.stack; import dataStucture2.array.MyDynamicArray; /** * 基于动态数组手写栈 * 设计时,栈中仅栈顶对 ...
 
随机推荐
- [HNOI2008]GT考试 题解
			
这题比较难搞.考虑设计状态:\(f_{i,j}\) 表示当前考虑到 \(X_i\) 位,且 \(X\) 的后 \(j\) 位刚好与 \(A\) 列匹配时的方案数.最终答案为 \(\sum_{i=0}^ ...
 - 关于java.lang.IllegalMonitorStateException异常说明(四)
			
1.异常原因及解释 首先你要了解这个异常为什么会抛出,这个异常会在三种情况下抛出:1>当前线程不含有当前对象的锁资源的时候,调用obj.wait()方法;2>当前线程不含有当前对象的锁资源 ...
 - shell脚本(12)-特殊变量介绍
			
一.特殊变量介绍: 1.$* :代表所有参数,其间隔为IFS内参数的第一个字元 2.$@ :与*星号类同,不同之处在于不参照IFS 3.$# :代表参数数量 4.$: 代表上一个指令的返回值 5.$- ...
 - TensorFlow模型部署到服务器---TensorFlow2.0
			
前言  当一个TensorFlow模型训练出来的时候,为了投入到实际应用,所以就需要部署到服务器上.由于我本次所做的项目是一个javaweb的图像识别项目.所有我就想去寻找一下java调用Tenso ...
 - CF427C题解
			
Description 有一张带点权有向图,你要在其中修建若干个检查站,使得对于每一个点 \(p\) ,都有 \(\geq 1\) 个检查站,满足: 存在一条从这个检查站出发到点 \(p\) 的路径: ...
 - SVG和Canvas的区别?
			
什么是SVG? SVG(可缩放矢量图形)编辑可缩放矢量图形是基于可扩展标记语言(标准通用标记语言的子集),用于描述二维矢量图形的一种图形格式.它由万维网联盟制定,是一个开放标准. 什么是 Canvas ...
 - C# 10 完整特性介绍
			
前言 开头防杠:.NET 的基础库.语言.运行时团队从来都是相互独立各自更新的,.NET 6 在基础库.运行时上同样做了非常多的改进,不过本文仅仅介绍语言部分. 距离上次介绍 C# 10 的特性已经有 ...
 - Alibaba-技术专区-Dubbo3总体技术体系介绍及技术指南(目录)
			
Dubbo3开题简介 如开篇所述,Dubbo 提供了构建云原生微服务业务的一站式解决方案,可以使用 Dubbo 快速定义并发布微服务组 件,同时基于 Dubbo 开箱即用的丰富特性及超强的扩展能力,构 ...
 - Note about Cobertura
			
Workflow of Unit Test without Cobertura compile source code; compile test code; run unit test; Workf ...
 - golang web框架 kratos中的日志框架
			
kratos是bilibili开源的一个web框架. 日志用法: logger.go package kratoslog import ( "flag" "github. ...