日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

compareto 和_清洁责任–摆脱均等,compareTo和toString

發布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 compareto 和_清洁责任–摆脱均等,compareTo和toString 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

compareto 和

您是否看過Java中Object類的javadoc? 大概。 您傾向于時不時地到達那里,然后沿著繼承樹進行挖掘。 您可能已經注意到的一件事是,每個類都必須繼承許多方法。 實現自己而不是堅持使用原始方法的最喜歡的方法可能是.toString()、. equals()和.hashCode()( Per-?keMinborg在本文中很好地描述了為什么應該始終實現這兩種方法) )。

但是這些方法顯然還不夠。 許多人從標準庫(如Comparable和Serializable)中混合使用其他接口。 但這真的很明智嗎? 為什么每個人都想如此糟糕地自己實現這些方法? 好吧,如果您打算將它們存儲在HashMap之類中并希望控制哈希沖突,那么實現自己的.equals()和.hashCode()方法可能會很有意義,但是compareTo()和toString()呢?

在本文中,我將介紹一種在Speedment開源項目中使用的軟件設計方法,該方法將對對象進行操作的方法實現為存儲在變量中的功能引用,而不是覆蓋內置在方法中的Java。 這有幾個優點。 您的POJO將會更短,更簡潔,可以在不繼承的情況下重用常見操作,并且可以靈活地在不同配置之間進行切換。

原始碼

讓我們從下面的示例開始。 我們有一個典型的Java類,名為Person。 在我們的應用程序中,我們要按Set的順序打印每個人的名字,其后跟姓氏(以防兩個人共享相同的名字)。

人.java

public class Person implements Comparable<Person> {private final String firstname;private final String lastname;public Person(String firstname, String lastname) {this.firstname = firstname;this.lastname = lastname;}public String getFirstname() {return firstname;}public String getLastname() {return lastname;}@Overridepublic int hashCode() {int hash = 7;hash = 83 * hash + Objects.hashCode(this.firstname);hash = 83 * hash + Objects.hashCode(this.lastname);return hash;}@Overridepublic boolean equals(Object obj) {if (this == obj) return true;if (obj == null) return false;if (getClass() != obj.getClass()) return false;final Person other = (Person) obj;if (!Objects.equals(this.firstname, other.firstname)) {return false;}return Objects.equals(this.lastname, other.lastname);}@Overridepublic int compareTo(Person that) {if (this == that) return 0;else if (that == null) return 1;int comparison = this.firstname.compareTo(that.firstname);if (comparison != 0) return comparison;comparison = this.lastname.compareTo(that.lastname);return comparison;}@Overridepublic String toString() {return firstname + " " + lastname;} }

Main.java

public class Main {public static void main(String... args) {final Set people = new HashSet<>();people.add(new Person("Adam", "Johnsson"));people.add(new Person("Adam", "Samuelsson"));people.add(new Person("Ben", "Carlsson"));people.add(new Person("Ben", "Carlsson"));people.add(new Person("Cecilia", "Adams"));people.stream().sorted().forEachOrdered(System.out::println);} }

輸出量

run: Adam Johnsson Adam Samuelsson Ben Carlsson Cecilia Adams BUILD SUCCESSFUL (total time: 0 seconds)

Person在此處實現了幾種方法來控制流的輸出。 hashCode()和equals()方法確保不能將重復的人添加到集合中。 sorted操作使用compareTo()方法生成所需的順序。 重寫的toString()方法最終控制了在調用System.out.println()時應如何打印每個Person。 您認識這種結構嗎? 您幾乎可以在幾乎所有的Java項目中找到它。

替代代碼

除了將所有功能都放入Person類之外,我們還可以嘗試使其盡可能保持清潔,并使用功能引用來處理這些修飾。 我們用equals,hashCode,compareTo和toString刪除所有樣板,而是引入兩個靜態變量COMPARATOR和TO_STRING。

人.java

public class Person {private final String firstname;private final String lastname;public Person(String firstname, String lastname) {this.firstname = firstname;this.lastname = lastname;}public String getFirstname() {return firstname;}public String getLastname() {return lastname;}public final static Comparator<Person> COMPARATOR =Comparator.comparing(Person::getFirstname).thenComparing(Person::getLastname);public final static Function<Person, String> TO_STRING =p -> p.getFirstname() + " " + p.getLastname(); }

Main.java

public class Main {public static void main(String... args) {final Set people = new TreeSet<>(Person.COMPARATOR);people.add(new Person("Adam", "Johnsson"));people.add(new Person("Adam", "Samuelsson"));people.add(new Person("Ben", "Carlsson"));people.add(new Person("Ben", "Carlsson"));people.add(new Person("Cecilia", "Adams"));people.stream().map(Person.TO_STRING).forEachOrdered(System.out::println);} }

輸出量

run: Adam Johnsson Adam Samuelsson Ben Carlsson Cecilia Adams BUILD SUCCESSFUL (total time: 0 seconds)

這種方法的好處是,我們現在可以在不更改Person類的情況下替換打印的順序和格式。 這將使代碼更易于維護,更易于重用,而不是說編寫起來更快。

翻譯自: https://www.javacodegeeks.com/2016/02/cleaner-responsibilities-get-rid-equals-compareto-tostring.html

compareto 和

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的compareto 和_清洁责任–摆脱均等,compareTo和toString的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。