Map习题 - 三国武将基础信息处理

8 篇文章 0 订阅
该博客展示了如何使用Java处理CSV数据,将数据封装到Hero对象中,并使用传统集合和Stream API进行排序。内容包括按寿命、武力值排序,查找男女武将的最高和最低武力值,以及获取武力值最高的前10名武将。主要涉及数据解析、对象创建、排序算法和Java集合框架的应用。
摘要由CSDN通过智能技术生成

Map习题

题目说明

// 数据说明
/*
             第一列: 编号   id
             第二列: 姓名   name
             第三列: 所属地  location
             第四列: 性别    sex
             第五列: 出生年   birth
             第六列: 去世年   death
             第七列: 武力值   strength
*/
String data = "1\t阿会喃\t云南\t男\t190\t225\t74\n" +
                "2\t伊籍\t江陵\t男\t162\t226\t24\n" +
                "3\t尹赏\t天水\t男\t194\t260\t44\n" +
                "4\t尹默\t梓潼\t男\t183\t239\t15\n" +
                "5\t于禁\t陈留\t男\t159\t221\t78\n" +
                "6\t卫瓘\t晋阳\t男\t220\t291\t46\n" +
                "7\t袁胤\t汝南\t男\t163\t199\t14\n" +
                "8\t袁熙\t汝南\t男\t176\t207\t51\n" +
                "9\t阎行\t长安\t男\t159\t222\t84\n" +
                "10\t阎柔\t北平\t男\t168\t227\t57\n" +
                "11\t袁术\t宛\t男\t155\t199\t65\n" +
                ...+
                "830\t刘氏\t洛阳\t女\t164\t205\t8\n";

要求:

  1. 将数据封装至 Hero 对象, 多个 Hero 对象放入 List 集合
  2. 将集合中的数据按寿命高低排序(即death-birth), 找到寿命最高的武将
  3. 按集合中数据按武力值排序, 找到武力最高的武将
  4. 找到男性武力最低的武将
  5. 找到女性武力最高的武将
  6. 找到武力最高的前10名武将

可以使用传统集合求解,也可以使用 stream api 求解

题解

MainApp.java

import map.ex.Role;
import java.util.*;
public class MianApp {

    public static void main(String[] args) {
        String data = "1\t阿会喃\t云南\t男\t190\t225\t74\n" +
                "2\t伊籍\t江陵\t男\t162\t226\t24\n" +
                "3\t尹赏\t天水\t男\t194\t260\t44\n" +
                "4\t尹默\t梓潼\t男\t183\t239\t15\n" +
                "5\t于禁\t陈留\t男\t159\t221\t78\n" +
                "6\t卫瓘\t晋阳\t男\t220\t291\t46\n" +
        		...
                "828\t卞氏\t许昌\t女\t160\t230\t24\n" +
                "829\t步练师\t\t女\t185\t238\t10\n" +
                "830\t刘氏\t洛阳\t女\t164\t205\t8\n";

        List<Role> rolesObject = setRolesObjects(data);

        Role deathBirth = findDeathBirth(rolesObject);
        System.out.println("寿命最高的武将为:" + deathBirth.getName() + "   寿命为:" + (Integer.parseInt(deathBirth.getDeath()) - Integer.parseInt(deathBirth.getBirth())) );
        Role strenght = findstrenght(rolesObject);
        System.out.println("武力值最高的武将为:" + strenght.getName() + "   武力值为:" + Integer.parseInt(strenght.getStrength()) );
        System.out.println("武力值最高的男武将信息为:");
        findManOrWomanStrenght(rolesObject, "男");
        System.out.println("武力值最高的女武将信息为:");
        findManOrWomanStrenght(rolesObject, "女");

        findFirstStrenghtNum(rolesObject, 10);

    }
    // 1. 将数据封装至 Hero 对象, 多个 Hero 对象放入 List 集合
    public static List<Role> setRolesObjects(String rolesString){
        List<String> role = Arrays.asList(rolesString.split("\n"));   // 数据拆分为各个角色信息
        List<List<String>> roles= new ArrayList<>();                     // 存入list<list>, 内为角色信息表
        for (String s : role) {
            roles.add(Arrays.asList(s.split("\t")));
        }
        List<Role> rolesObject = new ArrayList<>();
        for (List<String> rol : roles) {
            rolesObject.add(new Role(rol.get(0), rol.get(1), rol.get(2), rol.get(3), rol.get(4), rol.get(5), rol.get(6)));
        }
        return rolesObject;
    }
    // 2.将集合中的数据按寿命高低排序(即death-birth), 找到寿命最高的武将
    public static Role findDeathBirth(List<Role> rolesObject){
        Map<String, Integer> map = new HashMap<>();
        for (Role role : rolesObject) {
            map.put(role.getId(), Integer.parseInt(role.getDeath()) - Integer.parseInt(role.getBirth()));
        }
        Map<String, Integer> treemap = new TreeMap<>(new MyCompar1(map));
        treemap.putAll(map);
        // treemap.keySet().stream().findFirst().get(); 获取treemap中最大寿命的Role对象,也就是第一个对象
        //Optional<String> first = treemap.keySet().stream().findFirst();  first.get()可以得到Optional中的值
        // 得到角色对象,并返回
        return rolesObject.get(Integer.parseInt(treemap.keySet().stream().findFirst().get()) - 1);
    }
    // 3. 按集合中数据按武力值排序, 找到武力最高的武将
    public static Role findstrenght(List<Role> rolesObject){
        Map<String, Integer> map = new HashMap<>();
        for (Role role : rolesObject) {
            map.put(role.getId(), Integer.parseInt(role.getStrength()));
        }
        Map<String, Integer> treemap = new TreeMap<>(new MyCompar1(map));
        treemap.putAll(map);
        // 得到角色对象,并返回
        return rolesObject.get(Integer.parseInt(treemap.keySet().stream().findFirst().get()) - 1);

    }
    //4. 找到男/女性武力最低的武将
    public static void findManOrWomanStrenght(List<Role> rolesObject, String sex){
        Map<String, Integer> map = new HashMap<>();
        for (Role role : rolesObject) {
            if (role.getSex().equals(sex))
                map.put(role.getId(), Integer.parseInt(role.getStrength()));
        }
        Map<String, Integer> treemap = new TreeMap<>(new MyCompar1(map));
        treemap.putAll(map);
        // 得到角色对象,并返回
        for (Role role : rolesObject) {
            if (role.getId().equals(treemap.keySet().stream().findFirst().get())){
                System.out.println(role);
            }
        }
        //System.out.println(treemap.keySet().stream().findFirst().get());
        //return rolesObject.get(Integer.parseInt(treemap.keySet().stream().findFirst().get()) - 1);

    }
    // 6. 找到武力最高的前名武将
    public static  void findFirstStrenghtNum(List<Role> rolesObject, int num){
        Map<String, Integer> map = new HashMap<>();
        for (Role role : rolesObject) {
            map.put(role.getId(), Integer.parseInt(role.getStrength()));
        }
        Map<String, Integer> treemap = new TreeMap<>(new MyCompar1(map));
        treemap.putAll(map);

        System.out.println("武力值最高的前" + num + "人为:");
        int count = 0;
        for (Map.Entry<String, Integer> stringIntegerEntry : treemap.entrySet()) {
            if (count == num)
                break;
            System.out.println(rolesObject.get(Integer.parseInt(stringIntegerEntry.getKey()) -1));
            count++;
        }
    }
    /**
     * 比较器1 Value值比较
     * Value : Integer.parseInt(role.getDeath()) - Integer.parseInt(role.getBirth())
     */
    static class MyCompar1 implements Comparator<String> {
        private Map<String, Integer> map;

        public MyCompar1(Map<String, Integer> map) {
            this.map = map;
        }
        @Override
        public int compare(String key1, String key2) {
            if (map.get(key1).intValue() < map.get(key2).intValue()) {
                return 1;
            }
            if (map.get(key1).intValue() > map.get(key2).intValue()) {
                return -1;
            }
            return 0;
        }
    }
}

Role.java

public class Role {
    private String id;
    private String name;
    private String location;
    private String sex;
    private String birth;
    private String death;
    private String strength;

    public Role() {
    }

    public Role(String id, String name, String location, String sex, String birth, String death, String strength) {
        this.id = id;
        this.name = name;
        this.location = location;
        this.sex = sex;
        this.birth = birth;
        this.death = death;
        this.strength = strength;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getBirth() {
        return birth;
    }

    public void setBirth(String birth) {
        this.birth = birth;
    }

    public String getDeath() {
        return death;
    }

    public void setDeath(String death) {
        this.death = death;
    }

    public String getStrength() {
        return strength;
    }

    public void setStrength(String strength) {
        this.strength = strength;
    }

    @Override
    public String toString() {
        return "Role{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", location='" + location + '\'' +
                ", sex='" + sex + '\'' +
                ", birth='" + birth + '\'' +
                ", death='" + death + '\'' +
                ", strength='" + strength + '\'' +
                '}';
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

影修

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值