Как я использую PriorityQueue?

Ошибка говорит вам, что в какой-то момент discord.py получил объект JpegImageFile, ожидая объект, который поддерживает .startswith(b'\x89\x50\x4E\x47\x0D\x0A\x1A\x0A'). Это, как вы уже догадались, байтовоподобный объект.

Таким образом, вы должны использовать объект bytes вместо объекта PIL; и это даже делает ваш код проще, потому что у вас был байтовый объект с самого начала:

response = requests.get(url)
img = response.content
await message.guild.create_custom_emoji(name=emoji_name, image=img)
357
задан Just a student 11 July 2017 в 03:25
поделиться

2 ответа

Используйте перегрузку конструктора, которая берет a Comparator<? super E> comparator и передача в компараторе, который выдерживает сравнение соответствующим способом к Вашему порядку сортировки. Если Вы даете пример того, как Вы хотите отсортировать, мы можем предоставить некоторый код кода для реализации компаратора, если Вы не уверены. (Это довольно просто все же.)

Как был сказан в другом месте: offer и add просто различные реализации метода интерфейса. В источнике JDK я имею, add вызовы offer. Хотя add и offer имейте потенциально другое поведение в целом из-за способности к offer чтобы указать, что значение не может быть добавлено из-за ограничений размера, это различие не важно в PriorityQueue который неограничен.

Вот пример приоритетной сортировки очереди по длине строки:

// Test.java
import java.util.Comparator;
import java.util.PriorityQueue;

public class Test {
    public static void main(String[] args) {
        Comparator<String> comparator = new StringLengthComparator();
        PriorityQueue<String> queue = new PriorityQueue<String>(10, comparator);
        queue.add("short");
        queue.add("very long indeed");
        queue.add("medium");
        while (queue.size() != 0) {
            System.out.println(queue.remove());
        }
    }
}

// StringLengthComparator.java
import java.util.Comparator;

public class StringLengthComparator implements Comparator<String> {
    @Override
    public int compare(String x, String y) {
        // Assume neither string is null. Real code should
        // probably be more robust
        // You could also just return x.length() - y.length(),
        // which would be more efficient.
        if (x.length() < y.length()) {
            return -1;
        }
        if (x.length() > y.length()) {
            return 1;
        }
        return 0;
    }
}

Вот вывод:

короткий

носитель

очень долго действительно

432
ответ дан Jared Burrows 23 November 2019 в 00:21
поделиться

Просто соответствующая передача Comparator конструктору:

PriorityQueue(int initialCapacity, Comparator<? super E> comparator)

Единственная разница между offer и add интерфейс, которому они принадлежат. offer принадлежит Queue<E>, тогда как add первоначально замечен в Collection<E> интерфейс. Кроме этого оба метода делают точно, то же самое - вставляет указанный элемент в приоритетную очередь.

24
ответ дан dragonfly 23 November 2019 в 00:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: