Сортировка массивов int чисел

132
20 мая 2019, 01:40

Имеется 2 массива с числами. Элементы в них находятся в некой зависимости, т.е. 0 элемент 1 массива "связан" с 0 элементом 2 массива и т.д. Необходимо как-то отсортировать объекты по убыванию в отношении Vi/Wi и записать это в новое множество или массив. И далее при необходимости когда объекты оттуда будут браться, как-то получать их изначальные отношения.

static int[] values = new int[] {10, 8, 3, 8, 8}; // цены
static int[] weights = new int[] {8, 3, 4, 3, 3}; //вес предметов

PS: решаю задачу о рюкзаке методом жадных алгоритмов

Answer 1
import java.util.Collections;
import java.util.Arrays;
import java.util.List;
public class HelloWorld{
     public static void main(String []args){
        List<Entity> entities = Arrays.asList(new Entity(3,5),new Entity(5,7),new Entity(3,1),new Entity(1,10));
        Collections.sort(entities);
        entities.forEach(System.out::println);
     }
}
class Entity implements Comparable<Entity> {
        private int weight;
        private int cost;
        public Entity(int weight, int cost) {
            this.weight = weight;
            this.cost = cost;
        }
        private double getMeasure(){
            return cost * 1.0 / weight;
        }
        @Override
        public int compareTo(Entity entity) {
            double thisMeasure = getMeasure();
            double thatMeasure = entity.getMeasure();
            if(thisMeasure < thatMeasure) return -1;
            return thisMeasure > thatMeasure ? 1 : 0;
        }
        @Override
        public String toString() {
        return "Entity{" +
                "weight=" + weight +
                ", cost=" + cost +
                ", difference=" + getMeasure() +
                '}';
    }
}
Answer 2

Можно сделать так:

List<Integer> sortedValues = Stream
            .generate(new Supplier<Map.Entry<Integer, Integer>>() {
                private int index = -1;
                @Override
                public Map.Entry<Integer, Integer> get() {
                    index++;
                    return new AbstractMap.SimpleEntry<>(values[index], weights[index]);
                }})
            .limit(values.length)
            .sorted(Map.Entry.comparingByValue())
            .map(Map.Entry::getKey)
            .collect(toList());
READ ALSO
как сделать маску? [закрыт]

как сделать маску? [закрыт]

Как сделать такую маску, что-бы можно было правый квадрат центрировать как сверху так и снизу (то есть что-бы можно было привязать паралакс)?

161
Не могу навесить Ripple Effect

Не могу навесить Ripple Effect

недавно начал изучать ReactJS(новичек) и столкнулся с маленькой проблемкой

145
NuxtJS &amp; WordPress

NuxtJS & WordPress

Существует вопрос, каким образом можно реализовать совместимость WordPress и NuxtJS? Может быть статейки какие-то или видео на youtube? Может у кого-то...

140
не работает код из документации. почему?

не работает код из документации. почему?

Код, приведенный ниже, взят из доков, но в ответе приходит пустая строка:

148