xxxxxxxxxxint[] example1 = list.stream().mapToInt(i->i).toArray();// ORint[] example2 = list.stream().mapToInt(Integer::intValue).toArray();下面的居然比上面的快,上面的只能用来炫技,还是老老实实用下面的方法吧!!!
xxxxxxxxxxList<Integer> list = new ArrayList<>();int[] ans = new int[list.size()];for (int i = 0; i < list.size(); i++) { ans[i] = list.get(i);}以优先队列为例
xxxxxxxxxx// 方法一PriorityQueue<int[]> pq = new PriorityQueue<>(new Comparator<int[]>() { public int compare(int[] o1, int[] o2) { return o1[0] - o2[0]; }});// 方法二PriorityQueue<int[]> pq = new PriorityQueue<>((o1, o2) -> o1[0] - o2[0]);// 方法三PriorityQueue<int[]> pq = new PriorityQueue<>(Comparator.comparingInt(o -> o[0]));PriorityQueue<Person> pq = new PriorityQueue<>(Comparator.comparingInt(Person::getAge));xxxxxxxxxxMap<Integer, Integer> map = new HashMap<>();// 方法一:迭代器 EntrySetIterator<Map.Entry<Integer, Integer>> iterator = map.entrySet().iterator();while (iterator.hasNext()) { //...}// 方法二:迭代器 KeySetIterator<Integer> iterator = map.keySet().iterator();// 方法三:ForEach EntrySetfor (Map.Entry<Integer, Integer> entry : map.entrySet()) { //...}// 方法四:ForEach KeySetfor (Integer key : map.keySet()) { //...}// 方法五:Lambdamap.forEach((key, value) -> { //...});// 方法六:Streams API 单线程map.entrySet().stream().forEach((entry) -> { //...});// 方法七:Streams API 多线程map.entrySet().parallelStream().forEach((entry) -> { //...});结论:从性能方面考虑,应该尽量使用lambda或者是entrySet来遍历Map集合
关于如何使用 Java 8 Stream sorted() 来排序,可见 Java 8 Stream sorted()
根据key排序
xxxxxxxxxx// 方法一:KeySet 转化成 listList<Integer> list = new ArrayList<>(map.keySet());Collections.sort(list, Comparator.comparingInt(o -> o));// 方法二:EntrySet 转化成 listList<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());Collections.sort(list, Comparator.comparingInt(Map.Entry::getKey));// 方法三:TreeMap 重写 比较器Map<Integer, Integer> treeMap = new TreeMap<>(Comparator.comparingInt(o -> o));根据value排序,和根据key排序一样,不过是将比较器的比较内容改为比较value的大小
xxxxxxxxxx// EntrySet 转化成 listList<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());Collections.sort(list, Comparator.comparingInt(Map.Entry::getValue));