Java数组排序(array1(key),array2(value))

时间:2016-12-23 00:24:14

标签: java arrays sorting

我试图用C#做Java中的事情。在C#中:

Array.sort(array1, array2);

其中array1是键,array2是值

https://msdn.microsoft.com/en-us/library/85y6y2d3(v=vs.110).aspx

想知道Java是否内置了类似内容,或者我们必须进行某种自定义。

3 个答案:

答案 0 :(得分:3)

没有什么是微不足道的,但转换为自动排序的TreeMap可能是最佳方式:

Map<String, int> map = new TreeMap<String, int>();

for (var i = 0; i < array1.length; i++)
    map.put(array1[i], array2[i]);

迭代:

for (Map.Entry<String, int> entry : map.entrySet()) {
    // do stuff
}

答案 1 :(得分:1)

如果您使用的是Java 8,则可以根据array2创建一个array1流,如下所示:

int[] array3 = IntStream.range(0, array1.length).boxed()
    .sorted(Comparator.comparingInt(i -> array1[i]))
    .mapToInt(i -> array2[i])
    .toArray();

希望你能看到它是如何工作的:它产生一个索引流,根据第一个数组中的值对它们进行排序,将它们映射到第二个数组中的值,然后转换回数组。必须使用box和unbox只允许自定义排序(IntStream由于某种原因不支持)。

以下是一些示例代码:

    int[] array1 = { 5, 4, 3, 2, 1 };
    int[] array2 = { 10, 20, 30, 40, 50 };
    System.out.println(Arrays.toString(IntStream.range(0, array1.length).boxed()
            .sorted(Comparator.comparingInt(i -> array1[i]))
            .mapToInt(i -> array2[i]).toArray()));

这假设类型为int[],但它可以轻松转换为任何其他类型。同样的方法适用于可索引的集合。

如果数组是对象,那么您可以使用Arrays.sort(T[], Comparator)进行排序。遗憾的是,Java并没有提供原始类型的等价物 - 假设您希望按其自然顺序排序。

答案 2 :(得分:0)

我不知道JDK中有任何这样的工具。以下是如何实现它:

import store from './components/vuex/store.js'
import App from './components/App.vue';

const UserPage = r => require.ensure([], () => r(require('./components/views/UserPage.vue')), 'group-ip')
const UserSettings = resolve => require(['./components/views/UserSettings.vue'], resolve)            // r => require.ensure([], () => r(require('./components/views/PlayerSettings.vue')), 'group-settings')
const Hub = resolve => require(['./components/views/Hub/Hub.vue'], resolve)


const routes = [
  { path: '/', component: UserPage },
  { path: '/settings', component: UserSettings },
  { path: '/user/:id', component: Hub },
  { path: '*', redirect: '/' }
]

const router = new VueRouter({
  mode: 'history',
  routes
})


const app = new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app');