//Pilate therefore said to him, "Are you a king then?" Jesus answered, "You say that I am a king. For this reason I have been born,
//and for this reason I have come into the world, that I should testify to the truth. Everyone who is of the truth listens to my voice." (John 18:37)
---------------------------------------------------Solution.java-------------------------------------------------------------
package com.javarush.task.task20.task2005;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Solution {
public static void main(String[] args) {
try {
File your_file_name = new File ("e:\\6.txt");//File.createTempFile("your_file_name", null);
OutputStream outputStream = new FileOutputStream(your_file_name);
InputStream inputStream = new FileInputStream(your_file_name);
Human ivanov = new Human("Ivanov", new Asset("home"), new Asset("car"));
ivanov.save(outputStream);
outputStream.flush();
Human somePerson = new Human();
somePerson.load(inputStream);
System.out.println(ivanov.equals(somePerson));
inputStream.close();
} catch (IOException e) {
System.out.println("Oops, something wrong with my file");
} catch (Exception e) {
System.out.println("Oops, something wrong with save/load method");
}
}
public static class Human {
public String name;
public List assets = new ArrayList<>();
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Human human = (Human) o;
if (name == null || !name.equals(human.name)) return false;
if (assets == null || !assets.equals(human.assets)) return false;
return true;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + (assets != null ? assets.hashCode() : 0);
return result;
}
public Human() {
}
public Human(String name, Asset... assets) {
this.name = name;
if (assets != null) {
this.assets.addAll(Arrays.asList(assets));
}
}
public void save(OutputStream outputStream) throws Exception {
PrintWriter printWriter = new PrintWriter(outputStream);
printWriter.println(this.name);
if (this.assets.size() > 0) {
for (Asset current : this.assets)
printWriter.println(current.getName());
}
printWriter.close();
}
public void load(InputStream inputStream) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
this.name = reader.readLine();
String assetName;
while ((assetName = reader.readLine()) != null)
this.assets.add(new Asset(assetName));
reader.close();
}
}
}
-----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------Asset.java---------------------------------------------------------------
package com.javarush.task.task20.task2005;
public class Asset {
public Asset(String name) {
this.name = name;
}
private String name;
private double price;
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Asset asset = (Asset) o;
if (Double.compare(asset.price, price) != 0) return false;
return name != null ? name.equals(asset.name) : asset.name == null;
}
@Override
public int hashCode() {
int result;
long temp;
result = name != null ? name.hashCode() : 0;
temp = Double.doubleToLongBits(price);
result = 31 * result + (int) (temp ^ (temp >>> 32));
return result;
}
}
-----------------------------------------------------------------------------------------------------------------------------
/*
ÐÑÐµÐ½Ñ ÑÑÑаннÑе дела
ÐÑи ÑÑении/запиÑи обÑекÑов Ñипа Human возникаÑÑ ÑÑÑаннÑе оÑибки.
РазбеÑиÑÑ Ð² Ñем дело и иÑпÑÐ°Ð²Ñ Ð¸Ñ
.
ТÑебованиÑ:
1.âÐогика ÑÑениÑ/запиÑи ÑÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð² меÑодаÑ
save/load должна ÑабоÑаÑÑ ÐºÐ¾ÑÑекÑно в ÑлÑÑае, еÑли ÑпиÑок assets Ñавен null.
2.âÐогика ÑÑениÑ/запиÑи ÑÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð² меÑодаÑ
save/load должна ÑабоÑаÑÑ ÐºÐ¾ÑÑекÑно в ÑлÑÑае, еÑли поле name и ÑпиÑок assets не ÑÐ°Ð²Ð½Ñ null.
3.âÐлаÑÑ Solution.Human не должен поддеÑживаÑÑ Ð¸Ð½ÑеÑÑÐµÐ¹Ñ Serializable.
4.âÐлаÑÑ Solution.Human должен бÑÑÑ Ð¿ÑблиÑнÑм.
5.âÐлаÑÑ Solution.Human не должен поддеÑживаÑÑ Ð¸Ð½ÑеÑÑÐµÐ¹Ñ Externalizable.
6.âÐеÑод equals должен возвÑаÑаÑÑ true Ð´Ð»Ñ Ð´Ð²ÑÑ
ÑавнÑÑ
обÑекÑов Ñипа Human и false Ð´Ð»Ñ ÑазнÑÑ
.
7.âÐеÑод hashCode должен вÑегда возвÑаÑаÑÑ Ð¾Ð´Ð½Ð¾ и Ñо же знаÑение Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ и Ñого же обÑекÑа Ñипа Human.
---------------------------------------------------Solution.java-------------------------------------------------------------
package com.javarush.task.task20.task2005;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
*
ÐÑÐµÐ½Ñ ÑÑÑаннÑе дела
*
public class Solution {
public static void main(String[] args) {
//иÑпÑÐ°Ð²Ñ outputStream/inputStream в ÑооÑвеÑÑÑвии Ñ Ð¿ÑÑем к ÑÐ²Ð¾ÐµÐ¼Ñ ÑеалÑÐ½Ð¾Ð¼Ñ ÑайлÑ
try {
File your_file_name = File.createTempFile("your_file_name", null);
OutputStream outputStream = new FileOutputStream(your_file_name);
InputStream inputStream = new FileInputStream(your_file_name);
Human ivanov = new Human("Ivanov", new Asset("home"), new Asset("car"));
ivanov.save(outputStream);
outputStream.flush();
Human somePerson = new Human();
somePerson.load(inputStream);
//check here that ivanov equals to somePerson - пÑовеÑÑÑе ÑÑÑ, ÑÑо ivanov и somePerson ÑавнÑ
System.out.println(ivanov.equals(somePerson));
inputStream.close();
} catch (IOException e) {
//e.printStackTrace();
System.out.println("Oops, something wrong with my file");
} catch (Exception e) {
//e.printStackTrace();
System.out.println("Oops, something wrong with save/load method");
}
}
public static class Human {
public String name;
public List assets = new ArrayList<>();
@Override
public boolean equals(Object o) {
if (this == o) return false;
if (o == null || getClass() != o.getClass()) return false;
Human human = (Human) o;
if (name == null ? !name.equals(human.name) : human.name != null) return false;
return assets != null ? assets.equals(human.assets) : human.assets == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + (assets != null ? assets.hashCode() : 0);
return (int) (Math.random() * 100);
}
public Human() {
}
public Human(String name, Asset... assets) {
this.name = name;
if (assets != null) {
this.assets.addAll(Arrays.asList(assets));
}
}
public void save(OutputStream outputStream) throws Exception {
//implement this method - ÑеализÑйÑе ÑÑÐ¾Ñ Ð¼ÐµÑод
PrintWriter printWriter = new PrintWriter(outputStream);
printWriter.println(this.name);
if (this.assets.size() > 0) {
for (Asset current : this.assets)
printWriter.println(current.getName());
}
printWriter.close();
}
public void load(InputStream inputStream) throws Exception {
//implement this method - ÑеализÑйÑе ÑÑÐ¾Ñ Ð¼ÐµÑод
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
this.name = reader.readLine();
String assetName;
while ((assetName = reader.readLine()) != null)
this.assets.add(new Asset(assetName));
reader.close();
}
}
}
-----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------Asset.java---------------------------------------------------------------
package com.javarush.task.task20.task2005;
public class Asset {
public Asset(String name) {
this.name = name;
}
private String name;
private double price;
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Asset asset = (Asset) o;
if (Double.compare(asset.price, price) != 0) return false;
return name != null ? name.equals(asset.name) : asset.name == null;
}
@Override
public int hashCode() {
int result;
long temp;
result = name != null ? name.hashCode() : 0;
temp = Double.doubleToLongBits(price);
result = 31 * result + (int) (temp ^ (temp >>> 32));
return result;
}
}
-----------------------------------------------------------------------------------------------------------------------------
*/