Предел параметра потока Java без ограничения (несоответствие MongoDB)

О Боже! Я только что видел ваше опубликованное изображение снова, вы просто открываете свой php-файл в браузере. у вас есть open, использующий localhost url. если вы открываете файл непосредственно из своего каталога, он не будет выполнять php-код в любом случае.

use: http://locahost/index.php или http:127.0.0.1/index.php

включить php-код в вашем случае , вы используете <?, который является коротким кодом php для <?php

, по умолчанию короткие короткие коды php отключены.

также используют: sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt, если вы являетесь пользователем ubuntu .

0
задан mkczyk 24 March 2019 в 21:01
поделиться

1 ответ

Итак, есть несколько уровней проблем с тем, что вы пытаетесь сделать.

Вы говорите «практичность - не аргумент», и это нормально, но позвольте мне отметить, что Long.MAX_VALUE действительно превышает количество атомов на земле, так что вероятность того, что вы получите больше записей, чем от База данных действительно мала. Не говоря уже о том, что вы продолжаете собирать эти данные в список, чтобы вы могли столкнуться с проблемами памяти и в своем собственном приложении.

Итак, во-вторых, семантика limit() заключается в том, что она накладывает фиксированное ограничение на число записей, а «бесконечность» не является фиксированным пределом; следовательно, limit() просто не то, что вы ищете.

В-третьих, вы, кажется, ищете способ обойти это, поэтому у нас есть шаблон, который вы можете использовать, и это поддерживает ваш собственный счетчик. То, что вы хотите, это что-то вроде AtomicBigInteger, которого нет в JDK , но показано здесь .

Итак, вы должны создать Predicate, подобный этому

class BelowValue<T> implements Predicate<T> {
    BigInteger limit = BigInteger.ZERO;
    AtomicBigInteger counter = new AtomicBigInteger();

    public BelowValue(BigInteger limit) {
        this.limit = limit;
    }        
    public BelowValue() {}

    public boolean test(T ignored) {
        // short circuit on zero
        if (BigInteger.ZERO.compareTo(limit) == 0) { return true; }

        // check actual condition
        return  counter.incrementAndGet().compareTo(limit) > 0;
    }
}

, и затем вы можете использовать его в своем потоке с (Java 8)

Predicate<T> filter = new BelowValue<>(limit);
return stream
    .filter(filter)
    .boxed()
    .collect(Collectors.toList());

Примечание. однако filter - это , а не - операция с коротким замыканием, поэтому, если у вас бесконечный поток, он не прекратится (и будет очень неэффективным, если ваш поток намного длиннее предельного размера). [1118 ]

Java 9 takeWhile имеет короткое замыкание, поэтому вы можете заменить его на filter в приведенном выше примере.

0
ответ дан daniu 24 March 2019 в 21:01
поделиться
Другие вопросы по тегам:

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