Java课堂篇11_集合小练习(多对象放入Set集合、Set、List、Array互转、按照要求对象元素进行排序、按name属性创建Map、Map转Properties、Properties写入磁盘)

一、要求


1:首先将3猴子3狗熊3鸭子放到集合里
2:转成list,然后排序,先猴子再狗熊然后鸭子,同类的先类别再名字最后年龄,
3:按名字建索引 map key value list
4:map 存盘


二、实现

在这里插入图片描述
最后存盘效果图
在这里插入图片描述

重点是:

  • 设计类之间的关系,重写hashCode、equals、toString等方法
  • 实现排序需求需要实现Compareable接口,重写compareTo方法,完成 不同类 对象间的比较、同类对象不同属性 间的比较
  • 如何实现Map 中 name 和 多个对象 之间的映射关系
  • Map转化为Properties 然后写入磁盘

三、代码

  • Animal
package xiaosi.demo;

import java.util.Objects;

public abstract class Animal implements Comparable {
    
    
    public String name;
    public int age;

    public Animal(String name, int age) {
    
    
        this.name = name;
        this.age = age;
    }

    public abstract void draw();



    @Override
    public boolean equals(Object o) {
    
    
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Animal animal = (Animal) o;
        return age == animal.age &&
                Objects.equals(name, animal.name);
    }

    @Override
    public int hashCode() {
    
    
        return Objects.hash(name, age);
    }




    enum AniamKind{
    
    
        GAOYUDUKC,JIANCHANGDUCK,DAYUDUCK,KUNSHANDUCK,
        BIGBROWNBREAR,AMERICALBEAR,EYEBEAR,INDAIBEAR,
        FOXMONKEY,LAZYMONKEY,BABYMONKEY,FINGERMONKEY

    }

}


  • Monkey
package xiaosi.demo;

import java.util.Objects;

public class Monkey extends Animal implements Comparable{
    
    

    private AniamKind kind;

    public Monkey(String name, int age, AniamKind kind) {
    
    
        super(name, age);
        this.kind = kind;
    }

    @Override
    public void draw() {
    
    
            System.out.println("   ◢█◣▄▄▅▅▄▄◢█◣        ");// 1
            System.out.println("   ◢████████████◣       ");// 2
            System.out.println("   ███████████████       ");// 1
            System.out.println("   ██   ◥██◤   ██    ");// 2
            System.out.println(" ◢███    ◥◤    ██◣");// 1
            System.out.println(" ▊▎██◣        ◢█▊▊   ");// 2
            System.out.println(" ▊▎██◤  ●  ●  ◥█▊▊  ");// 1
            System.out.println("我是" + name + " 年龄为:" + age + " 种类为:" + kind);
            System.out.println(" ▊ ██          █▊▊   ");// 2
            System.out.println(" ◥▇██ ▊      ▊ █▇◤");// 1
            System.out.println("   ██ ◥▆▄▄▄▄▆◤ █▊  ◢▇▇◣");// 2
            System.out.println("◢██◥◥▆▅▄▂▂▂▂▄▅▆███◣▊◢ █");// 1
            System.out.println("█╳               ╳█◥◤◢◤");// 2
            System.out.println("◥█◣   ˙     ˙   ◢█◤ ◢◤ ");// 1
            System.out.println("  ▊                  █ ◢◤");// 2
            System.out.println("  ▊            ▊  ◢◤");// 1
            System.out.println("  ▊             █▇▇▇◤   ");// 2
            System.out.println(" ◢█▇▆▆▆▅▅▅▅▆▆▆▇█◣       ");// 1
            System.out.println(" ▊ ▂ ▊      ▊ ▂ ▊       ");// 2
            System.out.println(" ◥▆▆▆◤      ◥▆▆▆◤");// 1



    }

    @Override
    public boolean equals(Object o) {
    
    
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        Monkey monkey = (Monkey) o;
        return kind == monkey.kind;
    }

    @Override
    public int hashCode() {
    
    
        return Objects.hash(super.hashCode(), kind);
    }

    @Override
    public String toString() {
    
    
        //draw();
        return "Monkey{" +
                "kind=" + kind +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Object o) {
    
    
        if(o instanceof Monkey){
    
    
            //种类不同,比种类
            if(!this.kind.equals(((Monkey) o).kind)){
    
    
                if(this.kind.compareTo(((Monkey) o).kind) > 0){
    
    
                    return 1;
                }
                else{
    
    
                    return -1;
                }

            } //种类相同,比名字
            else {
    
    
                //名字不同
                if(!this.name.equals(((Monkey) o).name)){
    
    
                    if(this.name.compareTo(((Monkey) o).name) > 0){
    
    
                        return 1;
                    }
                    else{
    
    
                        return -1;
                    }

                }
                //种类、名字都相同,比年龄
                else{
    
    
                    return this.age - ((Monkey)o).age;
                }
            }



        }

        else if(o instanceof Bear){
    
    
            return -1;

        }
        else if(o instanceof Duck){
    
    
            return -1;

        }
        return 0;
    }
}

  • Duck
package xiaosi.demo;

public class Duck extends Animal implements Comparable{
    
    


    private AniamKind kind;



    public Duck(String name, int age, AniamKind kind) {
    
    
        super(name, age);
        this.kind = kind;
    }

    @Override
    public void draw() {
    
    

            System.out.println("   ,----, ");
            System.out.println("   ___.`      `, ");
            System.out.println("   `===  D     : ");
            System.out.println("     `’.      .’ ");
            System.out.println("        )    (                   , ");
            System.out.println("       /      \\_________________/| ");
            System.out.println("      /                          | ");
            System.out.println("我是" + name + " 年龄为:" + age + " 种类为:" + kind);
            System.out.println("     |                           ; ");
            System.out.println("     |               _____       / ");
            System.out.println("     |      \\       ______7    ,’ ");
            System.out.println("     |       \\    ______7     / ");
            System.out.println("      \\       `-,____7      ,’       ");
            System.out.println("^~^~^~^`\\                  /~^~^~^~^ ");
            System.out.println("  ~^~^~^ `----------------’ ~^~^~^ ");




    }

    @Override
    public String toString() {
    
    
       // draw();
        return "Duck{" +
                "kind=" + kind +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Object o) {
    
    
        if(o instanceof Duck){
    
    
            //种类不同,比种类
            if(!this.kind.equals(((Duck) o).kind)){
    
    
                if(this.kind.compareTo(((Duck) o).kind) > 0){
    
    
                    return 1;
                }
                else{
    
    
                    return -1;
                }

            } //种类相同,比名字
            else {
    
    
                //名字不同
                if(!this.name.equals(((Duck) o).name)){
    
    
                    if(this.name.compareTo(((Duck) o).name) > 0){
    
    
                        return 1;
                    }
                    else{
    
    
                        return -1;
                    }

                }
                //种类、名字都相同,比年龄
                else{
    
    
                    return this.age - ((Duck)o).age;
                }
            }



        }

        else if(o instanceof Monkey){
    
    
            return 1;

        }
        else if(o instanceof Bear){
    
    
            return 1;

        }
        return 0;
    }
}

  • Bear
package xiaosi.demo;

import java.util.Objects;

public class Bear extends Animal implements Comparable{
    
    

    private AniamKind kind;

    public Bear(String name, int age, AniamKind kind) {
    
    
        super(name, age);
        this.kind = kind;
    }

    @Override
    public void draw() {
    
    


            System.out.println("┴┬┴┬/ ̄\_/ ̄\");
            System.out.println("┬┴┬┴▏ ▏▔▔▔▔\");
            System.out.println("┴┬┴/\ /         ﹨");
            System.out.println("┬┴∕              / )");
            System.out.println("我是" + name + " 年龄为:" + age + " 种类为:" + kind);
            System.out.println("┴┬▏              ● ▏");
            System.out.println("┬┴▏                 ▔█ ");
            System.out.println("┴◢██◣       /\__/ ");
            System.out.println("┬█████◣         / ");
            System.out.println("┴█████████████◣ ");
            System.out.println("◢██████████████▆▄");
            System.out.println("█◤◢██◣◥█████████◤\ ");
            System.out.println("◥◢████ ████████◤     \");
            System.out.println("┴█████ ██████◤           ﹨");
            System.out.println("┬│ │█████◤                    ▏");
            System.out.println("┴│ │                               ▏");
            System.out.println("┬∕ ∕      /▔▔▔\              ∕");
            System.out.println("*∕___/﹨   ∕     \           /\");
            System.out.println("┴┬┴┬┴┬┴ \___ \   ﹨/▔\﹨/▔\");
            System.out.println("▲△▲▲╓╥╥╥╥╥╥╥╥\ ∕   /▔﹨ /▔");
            System.out.println("***╠╬╬╬╬╬╬╬╬*﹨    /  //    /");
            System.out.println("(\/)*(\/)** △▲▲﹨/__//__");


    }

    @Override
    public boolean equals(Object o) {
    
    

        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        Bear bear = (Bear) o;
        return kind == bear.kind;
    }

    @Override
    public int hashCode() {
    
    
        return Objects.hash(super.hashCode(), kind);
    }

    @Override
    public String toString() {
    
    
        //draw();
        return "Bear{" +
                "kind=" + kind +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Object o) {
    
    
        if(o instanceof Bear){
    
    
            //种类不同,比种类
            if(!this.kind.equals(((Bear) o).kind)){
    
    
                if(this.kind.compareTo(((Bear) o).kind) > 0){
    
    
                    return 1;
                }
                else{
    
    
                    return -1;
                }

            } //种类相同,比名字
            else {
    
    
                //名字不同
                if(!this.name.equals(((Bear) o).name)){
    
    
                    if(this.name.compareTo(((Bear) o).name) > 0){
    
    
                        return 1;
                    }
                    else{
    
    
                        return -1;
                    }

                }
                //种类、名字都相同,比年龄
                else{
    
    
                    return this.age - ((Bear)o).age;
                }
            }



        }

        else if(o instanceof Monkey){
    
    
            return 1;

        }
        else if(o instanceof Duck){
    
    
            return -1;

        }
        return 0;
    }


}

  • TestMain
package xiaosi.demo;

import java.io.*;
import java.util.*;

public class TestMain {
    
    
    public static void main(String[] args) throws IOException {
    
    
        Set<Animal> mySet = new HashSet<>();
        //1. 创建对象
        Duck d1 = new Duck("Tom",1, Animal.AniamKind.GAOYUDUKC );
        Duck d2 = new Duck("Jack",2, Animal.AniamKind.JIANCHANGDUCK );
        Duck d3 = new Duck("Tom",2, Animal.AniamKind.GAOYUDUKC );

        Monkey m1 = new Monkey("Tom",5, Animal.AniamKind.JIANCHANGDUCK);
        Monkey m2 = new Monkey("Jack",2, Animal.AniamKind.LAZYMONKEY);
        Monkey m3 = new Monkey("Jack",1, Animal.AniamKind.LAZYMONKEY);

        Bear b1 = new Bear("Tom",5, Animal.AniamKind.BIGBROWNBREAR);
        Bear b2 = new Bear("Jack",5, Animal.AniamKind.AMERICALBEAR);
        Bear b3 = new Bear("b",6, Animal.AniamKind.EYEBEAR);

        //1. 放入mySet
        mySet.add(d1);
        mySet.add(d2);
        mySet.add(d3);

        mySet.add(m1);
        mySet.add(m2);
        mySet.add(m3);

        mySet.add(b1);
        mySet.add(b2);
        mySet.add(b3);

       // System.out.println(mySet);

        /**
         * 遍历mySet放入List

        List<Animal> myList = new ArrayList<>();
        for (Animal animal : mySet) {
            myList.add(animal);

        }
         */
        //2. Set转化为List
        List<Animal> myList = new ArrayList<>(mySet);


        //System.out.println(myList);
        //2. 排序
        Collections.sort(myList);
        //System.out.println(myList);

        //3. 按名字建索引
        Map<String,List<Animal>> myMap = new HashMap<>();
        //遍历每个mySet的name
        for (Animal animal : mySet) {
    
    
            //list存放对象
            List<Animal> list = null;
            String nameKey = animal.name;
            //将name相等的对象放到list中
            list = new ArrayList<>();
            for (Animal animal1 : myList) {
    
    
                if(nameKey.equals(animal1.name)){
    
    

                   list.add(animal1);
                }

            }
            //放到map中
            myMap.put(nameKey,list);
        }
        //System.out.println(myMap);

        //3. 遍历每个map对应的每个value打印
        //4. map转为properties存储起来
        Properties pro = new Properties();

        Set<Map.Entry<String, List<Animal>>> entries = myMap.entrySet();
        for (Map.Entry<String, List<Animal>> entry : entries) {
    
    


            System.out.println("name :" + entry.getKey());

            //value为对应的多个对象,是个list集合
            List<Animal> value = entry.getValue();
            //遍历每个对象并打印
            for (Animal animal : value) {
    
    
                System.out.println("name 为 " + entry.getKey() + "的有:" +animal);

            }

            //将map的每一项转为properties
            pro.setProperty(entry.getKey(),value.toString());

            System.out.println("================");
        }
        System.out.println(pro);

        //4. IO写入pro到本地

        // 4.1 类加载器获取路径
        String path = TestMain.class.getResource("/").getPath();
        path +=  "animal.properties";
       // System.out.println(path);
        File f = new File("animal.properties");


        FileOutputStream fos = null;
        //抓一下异常
        try {
    
    
            fos = new FileOutputStream(f);
        } catch (FileNotFoundException e) {
    
    
            e.printStackTrace();
        }
        // 4.2 写入
        pro.store(fos,"GroupByAnimalName");



    }
}

四、小结

4.1 List、Set、Array等之间互转的方法

1. Array—>List

在这里插入图片描述

  • 栗子
String[] staffs = new String[]{
    
    "A", "B", "C"};
List staffsList = Arrays.asList(staffs);

2. Array—>List—>Set

在这里插入图片描述

  • 栗子
String[] staffs = new String[]{
    
    "A", "B", "C"};
Set<String> staffsSet = new HashSet<>(Arrays.asList(staffs));
staffsSet.add("D"); // ok
staffsSet.remove("Tom"); // ok

3. Set、List—>Array

在这里插入图片描述

  • 举栗
Object[] result = staffsList.toArray();

4. Set---->List

在这里插入图片描述

  • 举栗
List<String> result = new ArrayList<>(staffsSet);

4.2IO写出Properties到磁盘

//4. IO写入pro到本地

        // 4.1 类加载器获取路径
        String path = TestMain.class.getResource("/").getPath();
        path +=  "animal.properties";
       // System.out.println(path);
        File f = new File("animal.properties");


        FileOutputStream fos = null;
        //抓一下异常
        try {
    
    
            fos = new FileOutputStream(f);
            
        } catch (FileNotFoundException e) {
    
    
            e.printStackTrace();
        }
        // 4.2 写入
        pro.store(fos,"GroupByAnimalName");

猜你喜欢

转载自blog.csdn.net/qq_24654501/article/details/111100457