Java 查找数组中最常见的3个元素

Java 查找数组中最常见的3个元素,java,listview,user-interface,actionevent,Java,Listview,User Interface,Actionevent,我的代码相当长,但我将包含相关的代码片段。我正在创建一个包含商店元素的GUI。我有一个名为popularItemsTxt的文本字段,其中包含我列表中最受欢迎的3项 for(int i =0; i<3;i++) { if(electronicStore.stock[i] != null) { popularTxt.getItems().add(electronicStore.stock[i].toString()); } } for(int i=0;i 0){ 对于

我的代码相当长,但我将包含相关的代码片段。我正在创建一个包含商店元素的GUI。我有一个名为popularItemsTxt的文本字段,其中包含我列表中最受欢迎的3项

for(int i =0; i<3;i++) {
    if(electronicStore.stock[i] != null) {
    popularTxt.getItems().add(electronicStore.stock[i].toString());
    }
}
for(int i=0;i 0){

对于(int i=0;i假设
stock
是一个
数组
,其中包含一个int字段,例如您用来判断流行程度的视图,您可以(java 8+)使用
Streams
来实现这一点:

Class[] topThree =  Arrays.stream(stock)
                          .sorted(Comparator.comparingInt(Class::getViews).reversed())
                          .limit(3)
                          .toArray(Class[]::new);
其中,
getViews
是检索要比较的int属性的方法,
Class
是存储在
stock

或者如果您想要
列表

商店中的每个项目(假设项目是对象)都应该有一个属性来指示其流行程度(一个int成员变量)。每次将项目添加到购物车时,将流行指标变量增加1,并且当项目因某种原因被删除时,将值减少1。这可以在“添加”和“删除”按钮操作侦听器方法内完成


最后,当购物车(假设这也是对象列表)完成时(即按下btnComplete),您可以根据人气值按降序对购物车内的物品列表进行排序,并在排序后获得前三个物品。

如果您已经选择了物品列表以及确定每个物品人气的方法,最简单的方法是按人气对购买的物品进行排序,只查看前三个。我错过了吗这正是我所想的,但是我不确定如何对最频繁的项进行排序。好的,所以我实现了你的方法,但是我对JAVA非常陌生,所以我以前从未见过使用的Comparator工具。我得到一个错误(Class::getRating),知道为什么吗?我已经更新了code@coding101如果没有看到类的代码,很难说。
Class
getViews
是类名称和方法名称的占位符名称。好吧,我将使用什么方法?因为我的getStock()方法只返回我的stock@coding101你是如何决定这些物品的流行程度的?
Class[] topThree =  Arrays.stream(stock)
                          .sorted(Comparator.comparingInt(Class::getViews).reversed())
                          .limit(3)
                          .toArray(Class[]::new);
List<Class> topThree = Arrays.stream(stock)
                             .sorted(Comparator.comparingInt(Class::getViews).reversed())
                             .limit(3)
                             .collect(Collectors.toList());
Arrays.stream(stock)
      .sorted(Comparator.comparingInt(Class::getViews).reversed())
      .limit(3)
      .map(Class::toString)
      .forEach(popularTxt.getItems()::add);