2016-08-03 3 views
0

У меня есть список, который имеет атрибуты (StarRating, цена), как ниже в Scala:Сортировать по возрастанию и убыванию в списке

ListBuffer(RatingAndPriceDataset(3.5,200), RatingAndPriceDataset(4.5,500),RatingAndPriceDataset(3.5,100), RatingAndPriceDataset(3.0,100)) 

Мой Сортировать Priority Order является: Сортировать на основе рейтинга Star (по убыванию), а затем выбрать три самые низкие цены. Таким образом, в приведенном выше примере, я получаю список как:

RatingAndPriceDataset(4.5,500),RatingAndPriceDataset(3.5,100), RatingAndPriceDataset(3.5,200) 

, как можно увидеть рейтинг звезд является тот, который приходит как более высокий приоритет в роде. Я попробовал несколько вещей, но не смог этого сделать. Если я сортирую на основе звездного рейтинга, а затем Price, он не соблюдает порядок приоритета.

То, что я получаю от вызова метода, - это список, подобный этому (как указано выше). Список будет иметь некоторые данные, как показано ниже (пример):

StarRating Price 
3.5   200 
4.5   100 
4.5   1000 
5.0   900 
3.0   1000 
3.0   100 


**Expected result:** 

StarRating Price 
5.0   900 
4.5   100 
4.5   1000 
+0

Когда вы выбираете три самые низкие цены, как вы включили 'PriceDataset (4,5, 500)'? Я что-то упускаю? – ganesshkumar

+0

@ 911DidBush Я не могу выполнить вложенный или приоритетный вид. Поэтому, если я сортирую на основе Star Rating, а затем сортировку по ценам, я не получаю результаты, как ожидалось. Помогает ли это? –

+0

@ganesshkumar: Я улучшил описание. Поэтому мой приоритетный порядок сортировки - это рейтинг звезд, а затем цены. Надеюсь, поможет –

ответ

3

Использование данных в таблице вы предоставили (который отличается от данных в коде):

val input = ListBuffer(RatingAndPriceDataset(3.5,200), RatingAndPriceDataset(4.5,100),RatingAndPriceDataset(4.5,1000), RatingAndPriceDataset(5.0, 900), RatingAndPriceDataset(3.0, 1000), RatingAndPriceDataset(3.0, 100)) 
val output = input.sortBy(x => (-x.StarRating, x.Price)).take(3) // By using `-` in front of `x.StarRating` we're getting descending order of sorting 

println(output) // ListBuffer(RatingAndPriceDataset(5.0,900), RatingAndPriceDataset(4.5,100), RatingAndPriceDataset(4.5,1000)) 
Смежные вопросы