首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Java接口的返回列表

Java接口的返回列表
EN

Stack Overflow用户
提问于 2022-10-17 17:20:46
回答 3查看 71关注 0票数 0

我必须创建一个单词计数器程序。这在逻辑上并不是很困难,但我正在处理接口。因此,首先,我必须创建一个实现定义接口的类:

代码语言:javascript
代码运行次数:0
运行
复制
public interface WordFrequency {
String getWord();
int getFrequency();
}

我必须创建另一个类,它实现了定义的另一个接口:

代码语言:javascript
代码运行次数:0
运行
复制
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>中并返回的内容。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-10-17 18:16:37

您可以将此示例视为用例的起点:

接口

代码语言:javascript
代码运行次数:0
运行
复制
public interface WordFrequency {
    String getWord();
    int getFrequency();
}

上述接口的实现

代码语言:javascript
代码运行次数:0
运行
复制
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;
    }
}

按照您的需求获取列表的演示

代码语言:javascript
代码运行次数:0
运行
复制
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
    }
}

输出

代码语言:javascript
代码运行次数:0
运行
复制
w=k1, f=1
w=k2, f=2
w=k3, f=3
票数 1
EN

Stack Overflow用户

发布于 2022-10-17 18:13:40

简单地说,您必须有一个实现接口的具体对象。然后,可以将该对象添加到列表中,因为除了默认情况下的任何对象之外,它现在还将是一个WordFrequency对象。您还需要一个实现WordFrequencyAnalyzer接口的对象。

接口是一个契约,它保证实现该接口的任何对象都会有特定的行为。它抽象出实现,并允许对象具有更多的多态性。

这是一个很好的接口资源。

https://www.geeksforgeeks.org/interfaces-in-java/

票数 0
EN

Stack Overflow用户

发布于 2022-10-17 18:29:50

仍然是一个答案,显示record为ad数据类,以及Stream-。

地图中的n最高频率条目:

代码语言:javascript
代码运行次数:0
运行
复制
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()):
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74100934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档