2014-05-28 7 views
0

У меня есть проблема, подобная следующей, которая будет реализована в java.выберите строки с несколькими условиями для каждого столбца

item view  Hit   Quality(%) 
1 20  6  55 
2 18  8  67 
3 16  7  70 
4 13  9  80 
5 17  8  85 
.. ..  ..  .. 

У меня есть данные здесь в вышеуказанном формате.

Я должен выбрать только те строки, чья сумма зрения, сумма Hit и среднее значение качества самые высокие.

Это первая проблема выше, а вторая - дополнительная, так как у нас есть минимальный лимит, указанный для общего количества просмотров, всего хита и среднего общего качества, например view = 100, hit = 30 и quality = 70%. Здесь основным фактором является вид, вторичный фактор поражен, а третий фактор - качество. Итак, теперь нам нужно выбрать строки для этих максимальных значений, но будьте осторожны, чтобы сумма обзора и удара не была меньше предела. Если ни один случай не достигнет предела, тогда мы можем идти вперед, не заботясь об этом.

ответ

0

Используйте следующий код для сортировки результатов:

import java.util.Collections; 
import java.util.Comparator; 
import java.util.List; 


public class Item { 
    private int view; 
    private int hit; 
    private double quality; 
    public int getView() { 
     return view; 
    } 
    public void setView(int view) { 
     this.view = view; 
    } 
    public int getHit() { 
     return hit; 
    } 
    public void setHit(int hit) { 
     this.hit = hit; 
    } 
    public double getQuality() { 
     return quality; 
    } 
    public void setQuality(double quality) { 
     this.quality = quality; 
    } 


} 


class ExecuteTest{ 
    public void sort(List<Item> itemList){ 
     Collections.sort(itemList, new Comparator<Item>() { 

      @Override 
      public int compare(Item item1, Item item2) { 
       boolean checkView = true, checkHit = true; 
       if(item1.getView() == item2.getView()){ 
        checkView = false; 
       } 
       if(item1.getHit() == item2.getHit()){ 
        checkHit = false; 
       } 

       if(item1.getView() <=100 && item1.getHit() <= 30 && item1.getQuality() <= 70 
         && 
         item2.getView() <=100 && item2.getHit() <= 30 && item2.getQuality() <= 70 
         ){ 
        if(checkView && item1.getView() > item2.getView()){ 
         return 1; 
        }else if(checkView && item1.getView() < item2.getView()){ 
         return -1; 
        } 
        else if(checkHit && item1.getHit() > item2.getHit()){ 
         return 1; 
        }else if(checkHit && item1.getHit() < item2.getHit()){ 
         return -1; 
        } else if(item1.getQuality() > item2.getQuality()){ 
         return 1; 
        } else if(item1.getQuality() < item2.getQuality()){ 
         return -1 ; 
        } else{ 
         return 0; 
        } 


       } 
       return 0; 
      } 
     }); 

    } 

} 
Смежные вопросы