.hasNext()&toString

本文通过比喻解释Java中的迭代器Iterator的hasNext()方法和对象的toString()方法,以“数星星”为例,形象地阐述了如何使用迭代器遍历集合并调用对象的toString()方法进行字符串化展示。

Java语句中

.hasNext()方法以及toString:

举个例子吧

比如有个妹子在数星星

天空就是容器Collection

里面的星星就是容器里的对象Object

妹子指着星星的手指就是迭代器Iterator

iterator.hasNext()就是妹子在问:还有没有她没数过的星星

如果妹子要你对这星星赋诗一首,那你就调用星星.toString()方法把星星变成一行行字

当然这诗句要你自己写,所以这就叫重写toString方法

如果你语文没学好啥都写不出来,你一样可以调用toString() 显示一些字,但是这些字是一个叫sun 的枪手写的

能不能满足妹子的要求就听天由命了

 

import java.text.DecimalFormat; import java.util.*; abstract class Person { protected String name; protected int age; protected boolean gender; public Person(String name, int age, boolean gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return name + "-" + age + "-" + gender; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; Person person = (Person) obj; return age == person.age && gender == person.gender && Objects.equals(name, person.name); } public String getName() { return name; } public int getAge() { return age; } } class Student extends Person { private String stuNo; private String clazz; public Student(String name, int age, boolean gender, String stuNo, String clazz) { super(name, age, gender); this.stuNo = stuNo; this.clazz = clazz; } @Override public String toString() { return "Student:" + super.toString() + "-" + stuNo + "-" + clazz; } @Override public boolean equals(Object obj) { if (!super.equals(obj)) return false; Student student = (Student) obj; return Objects.equals(stuNo, student.stuNo) && Objects.equals(clazz, student.clazz); } } class Company { private String name; public Company(String name) { this.name = name; } @Override public String toString() { return name; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; Company company = (Company) obj; return Objects.equals(name, company.name); } } class Employee extends Person { private Company company; private double salary; public Employee(String name, int age, boolean gender, double salary, Company company) { super(name, age, gender); this.salary = salary; this.company = company; } @Override public String toString() { DecimalFormat df = new DecimalFormat("#.#"); return "Employee:" + super.toString() + "-" + (company != null ? company.toString() : "null") + "-" + df.format(salary); } @Override public boolean equals(Object obj) { if (!super.equals(obj)) return false; Employee employee = (Employee) obj; DecimalFormat df = new DecimalFormat("#.#"); return Double.compare( Double.parseDouble(df.format(this.salary)), Double.parseDouble(df.format(employee.salary))) == 0 && Objects.equals(company, employee.company); } } public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); List<Person> personList = new ArrayList<>(); // 读取输入直到非s/e字符 while (scanner.hasNext()) { String type = scanner.next(); if (!type.equals("s") && !type.equals("e")) { break; } String name = scanner.next(); int age = scanner.nextInt(); boolean gender = scanner.nextBoolean(); if (type.equals("s")) { String stuNo = scanner.next(); String clazz = scanner.next(); personList.add(new Student(name, age, gender, stuNo, clazz)); } else { double salary = scanner.nextDouble(); String companyName = scanner.next(); Company company = companyName.equals("null") ? null : new Company(companyName); personList.add(new Employee(name, age, gender, salary, company)); } } // 按姓名升序,姓名相同则按年龄升序排序 personList.sort(Comparator.comparing(Person::getName).thenComparingInt(Person::getAge)); // 输出排序后的所有对象 for (Person person : personList) { System.out.println(person); } // 读取下一个输入(检查是否为exit) if (scanner.hasNext() && scanner.next().equals("exit")) { scanner.close(); return; } // 使用Set去重 Set<Student> stuSet = new LinkedHashSet<>(); Set<Employee> empSet = new LinkedHashSet<>(); // 分类并去重 for (Person person : personList) { if (person instanceof Student) { stuSet.add((Student) person); } else if (person instanceof Employee) { empSet.add((Employee) person); } } // 输出分类结果 System.out.println("stuList"); stuSet.forEach(System.out::println); System.out.println("empList"); empSet.forEach(System.out::println); scanner.close(); } }修改这段代码,这段代码答案错误
最新发布
07-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值