我必須創建一個字數計數器程式。從邏輯上講這不是很困難,但我被介面卡住了。所以首先我必須創建一個實作定義介面的類:
public interface WordFrequency {
String getWord();
int getFrequency();
}
我必須創建另一個類來實作另一個定義的介面:
public interface WordFrequencyAnalyzer {
int calculateHighestFrequency(String text);
int calculateFrequencyForWord (String text, String word);
List<WordFrequency> calculateMostFrequentNWords (String text, int n);
}
現在,此介面中的第三個方法回傳前一個介面的串列。我將維護地圖中單詞的頻率。此方法要求我回傳給定文本中頻率最高的 N 個單詞。使用降序值對地圖進行排序并相應地回傳是非常容易的,但是我如何創建一個包含地圖中正確值的特定介面的串列,以便以所需的格式回傳?
編輯:我Map<String,Integer> m = new HashMap<String,Integer>()用來存盤單詞及其頻率。這是我需要存盤List<WordFrequency>和回傳的東西。
uj5u.com熱心網友回復:
您可以將此示例視為您的用例的起點:
界面
public interface WordFrequency {
String getWord();
int getFrequency();
}
上述介面的實作
public class WordFreqImpl implements WordFrequency {
final String w;
final Integer f;
public WordFreqImpl(String word, Integer freq) {
w = word;
f = freq;
}
@Override
public String getWord() {
return w;
}
@Override
public int getFrequency() {
return f;
}
@Override
public String toString() {
return ""
"w=" w
", f=" f;
}
}
根據您的要求獲取串列的演示
public class WordFreqDemo {
public static void main(String[] args) {
Map<String,Integer> m = new HashMap<>();
m.put("k1",1);
m.put("k2",2);
m.put("k3",3);
List<WordFrequency> wordFrequencyList = new ArrayList<>();
for (Map.Entry<String, Integer> entry: m.entrySet()) {
wordFrequencyList.add(new WordFreqImpl(entry.getKey(), entry.getValue()) {
});
}
for (WordFrequency w: wordFrequencyList) {
System.out.println(w);
}
// return wordFrequencyList as per use case
}
}
輸出
w=k1, f=1
w=k2, f=2
w=k3, f=3
uj5u.com熱心網友回復:
簡單地說,你必須有一個實作介面的具體物件。然后您可以將該物件添加到您的串列中,因為除了默認情況下的任何物件之外,它現在將是一個 WordFrequency 物件。您還需要一個實作 WordFrequencyAnalyzer 介面的物件。
介面是一種契約,它保證任何實作該介面的物件都將具有某些行為。它將實作抽象出來并允許物件更加多型。
這是關于介面的好資源
https://www.geeksforgeeks.org/interfaces-in-java/
uj5u.com熱心網友回復:
仍然是顯示record為 ad-hoc 資料類的答案,并且Stream-。
地圖中頻率最高的n條目:
record Fr(String word, int frequency) implements WordFrequency {
@Override
public String getWord() {
return word;
}
@Override
public int getFrequency() {
return frequency;
}
}
Map<String,Integer> m = ...
List<WordFrequency> wfs = m.entrySet().stream()
.sorted(e -> Comparator.comparingInt(e.getValue()).reversed()
.thenComparing(e.getKey()))
.limit(n)
.map(e -> new Fr(e.getKey(), e.getValue())
.collect(Collectors.toList()):
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/516174.html
標籤:爪哇列表界面
下一篇:字串陣列中的元音數
