具有自然顺序的集合以及在特定条件下更新元素

时间:2014-08-23 18:21:24

标签: java collections java-7

我的用例如下:

我想要使用自然顺序插入某些元素(在我的情况下,假设是从更便宜的价格开始的价格列表)。

我必须存储的对象遵循以下类:

class Article { int id; int price; }
  • 我想仅在价格如下时才更新Collection中的项目 一定条件下。
  • 我还要保留订购的元素 根据价格。

我在考虑TreeSet,但Set没有get方法,因此根据我的经验,更新元素需要迭代Set以找到正确的对象

现在我选择了我需要时订购的List,但如果您认为可以满足我的要求或者有更好的方法,我会很好奇。

由于

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,基本上你只想让你的元素遵循一个顺序: 您可以使用Collections.sort()和实现Comparator<E>的类的组合。

  import java.util.*;

 // class used to compare "price"
class priceComparator implements Comparator<Article> {

@Override
public int compare(Article o1, Article o2) {
    return o1.price - o2.price;    
  } 
 }

  public class Article {

  int id;
  int price;

  public Article(int id, int price) {
    this.id = id;
    this.price = price;
}

public static void main(String[] args) {

    List<Article> list = new ArrayList<>();
     list.add(new Article(1, 4000));
     list.add(new Article(2, 7000)); 
     list.add(new Article(3, 1000)); 

        // sorting Article based on "price" ASCENDING
        Collections.sort(list, new priceComparator());

        // sorting Article based on "price" DESCENDING
       //Collections.sort(list, Collections.reverseOrder(new priceComparator()));

       // put the sorted pair of "id" and "price" into map
       Map<Integer,Integer> map = new LinkedHashMap<>();

      for(Article l : list){
      map.put(l.id, l.price);  
      }


    System.out.println("Id | Price");
    for(Map.Entry<Integer,Integer> elemenOfMap: map.entrySet()){
    System.out.println(elemenOfMap.getKey() +" | "+elemenOfMap.getValue());
    }       
   }
}

输出:

Id | Price
3 | 1000
1 | 4000
2 | 7000