рд╣рдо рдлрд┐рд░ рд╕реЗ рдЕрдиреБрдХреВрд▓рди, рдЕрдиреБрдХреВрд▓рди рдФрд░ рдЕрдиреБрдХреВрд▓рди рдХрд░рддреЗ рд╣реИрдВ

рд╕реЗрд╡рд╛ рдХреЗ рдХрд░реНрддрд╡реНрдп рдХреЗ рдХрд╛рд░рдг, рдореБрдЭреЗ рд╕рдордп-рд╕рдордп рдкрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрд╡рд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИрдВ рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрддрд░ рд╕реЗ рдиреАрдЪреЗ рдирд╣реАрдВ рдЧрд┐рд░ рд╕рдХрддреА рд╣реИрдВред рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╡рд╛рд╕реНрддреБ рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдХреНрд╕рд░ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдореЙрдбреНрдпреВрд▓ рддрдХ рдПрдХ рд╕реНрдерд╛рди рд╕реЗ рджреВрд╕рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕реНрдерд╛рди рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рднрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдореИрдВ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реБрдЖ рдХрд┐ рддрд╛рд░реАрдЦ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЖрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕реЗ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ:

рддрд┐рдерд┐

рдПрдХ рджрд░реНрдЬрди рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛ рдХрд┐ рдХреИрд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреМрд░рд╛рди, рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдПрдХ рдирдИ рддрд┐рдерд┐ рд╡рд╕реНрддреБ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ, рд▓рдХреНрд╖реНрдп рдПрдХ рд╣реА рд╣реИ - рд╡рд░реНрддрдорд╛рди рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

public boolean isValid(Date start, Date end) { Date now = new Date(); return start.before(now) && end.after(now); } 

рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ - рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рд╣реА рд╕рдорд╛рдзрд╛рдиред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╣рд╛рдБ, рджреЛ рдЕрдВрдХреЛрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде:

  public boolean isValid(Date start, Date end) { long now = System.currentTimeMillis(); return start.getTime() < now && now < end.getTIme(); } 


SimpleDateFormat

рдмрд╣реБрдд рдмрд╛рд░ рд╡реЗрдм рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдЯрд╛рд╕реНрдХ рдХреЛ рдбреЗрдЯ рдореЗрдВ, рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдбреЗрдЯ рдЯреНрд░рд╛рдВрд╕рд▓реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдЖрддрд╛ рд╣реИред рдХрд╛рд░реНрдп рдХрд╛рдлреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

  return new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z").parse(dateString); 

рдпрд╣ рдПрдХ рд╕рд╣реА рдФрд░ рддреНрд╡рд░рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рд╕рд░реНрд╡рд░ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реИрдХрдбрд╝реЛрдВ рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рд░реНрд╡рд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд┐рдВрдкрд▓ рд╣реИрд╡реАрд╡реЗрдЯрдлрд╛рд░реНрдореЗрдЯ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдмрдЬрд╛рдп рднрд╛рд░реА рд╡рдЬрди рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдлреЙрд░реНрдореИрдЯрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдИ рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рд▓рд╛рдЗрдЯрд╡реЗрдЯ рдХреИрд▓реЗрдВрдбрд░ (рдЬрд┐рд╕рдХрд╛ рдЖрдХрд╛рд░> 400 рдмрд╛рдЗрдЯреНрд╕) рд╣реИред

SimpleDateFormat рдХреЛ рдПрдХ рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░ рдмрдирд╛рдХрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред рдФрд░ рдПрдХ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдорд╛рд╣реМрд▓ рдореЗрдВ, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдирдВрдмрд░рдлрд╝реЙрд░реНрдореИрдЯ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рджреВрд╕рд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдПрдХ рд╕рдВрджрд┐рдЧреНрдз рдЪреАрдЬ рд╣реИред рдзрд╛рдЧреЗ рдХреЗ рдмреАрдЪ рд╢рд╛рдирджрд╛рд░ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рди рдХреЗрд╡рд▓ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдмрд┐рдЧрдбрд╝ рднреА рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо 2 рд╕рдорд╛рдзрд╛рди рд╣реИрдВ:


рдмрд┐рдирд╛ рд╕реЛрдЪреЗ рд╕рдордЭреЗ

рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдХрд╛рд░реНрдп рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЗрдХрд╛рдИ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдарддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

  return items.get(new Random().nextInt(items.size())); 

рдорд╣рд╛рди, рдЖрд╕рд╛рди, рддреЗрдЬред рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЙрд▓ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдирдП рд░реИрдВрдбрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдирд┐рд░рдВрддрд░ рдирд┐рд░реНрдорд╛рдгред рдХреНрдпрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  private static final Random rand = new Random(); ... return items.get(rand.nextInt(items.size())); 

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ - рд╕рд╣реА рд╕рдорд╛рдзрд╛рди, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдпрд╣ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд░реИрдВрдбрдо рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдПрдХ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдпрд╣ рдзреАрд░реЗ-рдзреАрд░реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рди рдУрд░реЗрдХрд▓ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрд╛ рд╣реИ:

  return items.get(ThreadLocalRandom.current().nextInt(items.size())); 

рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ - рдпрд╣ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рди рд╣реИред рдорд▓реНрдЯреА-рдереНрд░реЗрдбреЗрдб рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд░реИрдВрдбрдореЛрдХреЗрд▓рд░реИрдВрдбрдо рд░реИрдВрдбрдо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╡рд░реНрдЧ рдХреЗрд╡рд▓ рд╕рдВрд╕реНрдХрд░рдг 7 ( рдмрдЧ рдлрд┐рдХреНрд╕ рдХреЗ рдмрд╛рдж, рд╣рд╛рдп рдереЗрд╢реЗрдб ) рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рд╕рдорд╛рдзрд╛рди SimpleDateFormat рдХреЗ рд╕рд╛рде рд╣реА рд╣реИ, рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдирд┐рдЬреА рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рдеред

рдЕрд╢рдХреНрдд рдирд╣реАрдВ

рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕, рд╢реВрдиреНрдп рдорд╛рдиреЛрдВ рд╕реЗ рдмрдЪрддреЗ рд╣реБрдП, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

 public Item someMethod() { Item item = new Item(); //some logic if (something) { fillItem(item); } return item; } 

рдирддреАрдЬрддрди, рднрд▓реЗ рд╣реА рдХреБрдЫ рд╕рдЪ рди рд╣реЛ, рдлрд┐рд░ рднреА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗ (рдмрд╢рд░реНрддреЗ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЛ рдЕрдХреНрд╕рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

regexp

рдпрджрд┐ рдЖрдк рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб:

 public Item isValid(String ip) { Pattern pattern = Pattern.compile("xxx"); Matcher matcher = pattern.matcher(ip); return matcher.matches(); } 

рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬреИрд╕реЗ рд╣реА рдПрдХ рдирдпрд╛ рдЖрдИрдкреА рдкрддрд╛ рдЖрддрд╛ рд╣реИ, рд╣рдореЗрдВ рд╕рддреНрдпрд╛рдкрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ - рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреИрдХред рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 private static final Pattern pattern = Pattern.compile("xxx"); public Item isValid(String ip) { Matcher matcher = pattern.matcher(ip); return matcher.matches(); } 

рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд╣рд░ рджрд┐рдпрд╛рд╕рд▓рд╛рдИ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рд▓рд┐рдП рднреА рдЖрджрд░реНрд╢ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ:

 private static final Pattern pattern = Pattern.compile("xxx"); private final Matcher matcher = pattern.matcher(""); public Item isValid(String ip) { matcher.reset(ip); return matcher.matches(); } 

рдЬреЛ рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реИ ... рд╕рд╣реА, рдереНрд░реЗрдбрд▓реЛрдХред

рдЯреНрд░рдВрдХрдЯ рдбреЗрдЯ

рдПрдХ рдФрд░ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рджрд┐рдирд╛рдВрдХ рдХреЛ рдШрдВрдЯреЗ, рджрд┐рди, рд╕рдкреНрддрд╛рд╣ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рд░реМрдВрдж рд░рд╣рд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, Apachevsky DateUtils рд╕реЗ рд▓реЗрдХрд░ рдЕрдкрдиреА рдмрд╛рдЗрдХ рддрдХ:

  public static Date truncateToHours(Date date) { Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); calendar.setTime(date); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); return calendar.getTime(); } 

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╣рдбрд┐рдк рдЪрд░рдг рдХреЗ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдХреЛрдб рдХреА рдЗрди 2 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдЖрдпрд╛, рдЬрд┐рд╕рдореЗрдВ 60% CPU рдЦрдкрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

 key.setDeliveredDateContent(truncateToHours(byPeriodKey.getContentTimestamp())); key.setDeliveredDateAd(truncateToHours(byPeriodKey.getAdTimestamp())); 

рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдп рдерд╛, рд▓реЗрдХрд┐рди рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдЭреВрда рдирд╣реАрдВ рдмреЛрд▓ рд░рд╣рд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдирдХреНрд╢рд╛ рд╡рд┐рдзрд┐ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд▓реА, рдФрд░ рдХреИрд▓реЗрдВрдбрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ truncateToHours () рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд╣рд░ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд┐рд╕рдиреЗ рдорд╛рдирдЪрд┐рддреНрд░ рд╡рд┐рдзрд┐ рдХреА рдЧрддрд┐ 2 рдЧреБрдирд╛ рдмрдврд╝рд╛ рджреАред

HashCodeBuilder

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпреЛрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╣реИрд╢рдХреЛрдб () рдФрд░ рдмрд░рд╛рдмрд░ () рдкрджреНрдзрддрд┐ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрд╛рдЪреЗрд╡реНрд╕реНрдХреА рд╣реЗрд▓реНрдкрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

  @Override public boolean equals(Object obj) { EqualsBuilder equalsBuilder = new EqualsBuilder(); equalsBuilder.append(id, otherKey.getId()); ... } @Override public int hashCode() { HashCodeBuilder hashCodeBuilder = new HashCodeBuilder(); hashCodeBuilder.append(id); ... } 


рдпрд╣, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдЖрдк рдЖрд╡реЗрджрди рдХреЗ рдЬреАрд╡рди рдХреЗ рджреМрд░рд╛рди рдХрдИ рдмрд╛рд░ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЙрдиреНрд╣реЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдбреВрдк рдиреМрдХрд░реА рдХреЗ рд╕реЙрд░реНрдЯреЗрдЬ рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди рдкреНрд░рддреНрдпреЗрдХ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖

рдореИрдВ рдХреНрдпреЛрдВ рд╣реВрдБ - рдирд╣реАрдВ, рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреНрд░рд╣ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдФрд░ рдлрд╛рд╡рдбрд╝рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдкрд░ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/In175049/


All Articles