我有一個包含2d列的表:Language和Proficiency,我需要用輸入填充它。
我創建了一個方法:
public void typeLanguages(@NotNull List<String> languages,
@NotNull List<SkillLevel> skillLevels) {
if(languages.size() != skillLevels.size()) { throw new IllegalArgumentException(); }
IntStream.range(0, skillLevels.size()).forEach(i -> {
typeAndConfirm(languagesFld.get(i), languages.get(i));
typeAndConfirm(skillFld.get(i), skillLevels.get(i).getLanguage());
});
}
IntStream被使用,所以i-th language-skillLevel對插入到i-th 行。
但是,用戶可能會提供不同大小的串列(盡管受到保護),或者他們可能會混淆順序并給自己錯誤的熟練度分數。
AFAIK Java 中沒有元組。我嘗試使用 Map,但看不到任何可以讓我使用imap 的 -th 元素的方法。
uj5u.com熱心網友回復:
不要濫用集合
這兩條資料:語言和水平分別沒有任何價值,只有當你同時擁有它們時它們才有用。這意味著必須構成一個物件。試圖利用 a Mapjust 來描述兩個屬性之間的關系將是對集合的濫用,這將導致無法維護的代碼。
因此,您可以定義一個記錄(或一個類,如果您希望它是可變的或使用早于 Java 16 的版本),而不是維護兩個單獨的串列,這會使您的代碼變得脆弱,它將兩個屬性組合到一個物件中:
public record LanguageLevel(String language, SkillLevel level) {}
用那個代替,List<String>你List<SkillLevel>將處理一個List<LanguageLevel>.
如果您想對串列中的物件進行排序,并且只有一種特定的排序方式在您的應用程式中有意義 - 所謂的自然順序,那么您可以制作LanguageLevel實作Comparable介面。
但是,如果在您的領域模型中,這些對沒有自然順序Comparator,并且根據查看界面的情況,它們的排序可能會有所不同。
您可以定義多個比較器以促進不同的排序方式。例如:
Comparator<LanguageLevel> bySkillDescAndByLang =
Comparator.comparing(LanguageLevel::level).reversed() // assumption that SkillLevel implements Comparable<SkillLevel>
.thenComparing(LanguageLevel::language);
List<LanguageLevel> languages = // initialize the list
languages.sort(bySkillDescAndByLang);
uj5u.com熱心網友回復:
任何一個:
- 使用
NavigableMap諸如TreeMap - 定義具有兩個成員欄位的記錄(名義元組),實作
Comparable
對于地圖方法:
NavigableMap < String , SkillLevel > map = new TreeMap<>() ;
map.put( someLangString , someSkillLevel ) ;
map.put( someOtherLangString , someOtherSkillLevel ) ;
…
鍵值對將按照字串鍵的自然順序自動排序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/490267.html
上一篇:串列串列中的重復串列
