Есть что-то вроде List & lt; T & gt;. Сначала в Java? [Дубликат]

Это одно из мест, с помощью которого привязка данных, используемая во многих новых фреймворках JavaScript, будет очень полезна для вас ...

Итак, если вы используете Angular, React или любые другие фреймворки, которые делают два способа связывания данных, эта проблема просто исправлена ​​для вас, поэтому простым языком ваш результат undefined на первом этапе, поэтому вы получили result = undefined до получения данных, а затем, как только вы получите результат , он будет обновляться и присваиваться новому значению, которое отвечает на ваш вызов Ajax ...

Но как вы можете сделать это в чистом javascript или jQuery, например, как вы задали этот вопрос?

Вы можете использовать обратный вызов, обещание и недавно наблюдаемое, чтобы обрабатывать его для вас, например, в обещаниях мы имеем некоторые функции, такие как success () или then (), которые будут выполняться, когда ваши данные будут готовы для вас, с функцией обратного вызова или подписки на наблюдаемые.

Например, в вашем случае, в котором вы используете jQuery, вы можете сделать что-то вроде этого:

$(document).ready(function(){
    function foo() {
        $.ajax({url: "api/data", success: function(data){
            fooDone(data); //after we have data, we pass it to fooDone
        }});
    };

    function fooDone(data) {
        console.log(data); //fooDone has the data and console.log it
    };

    foo(); //call happens here
});

Для получения дополнительной информации n изучение обещаний и наблюдаемых, которые являются новыми способами для создания асинхронных материалов.

64
задан Stuart Marks 29 July 2014 в 07:44
поделиться

2 ответа

Это может быть то, что вы ищете:

yourStream
    .filter(/* your criteria */)
    .findFirst()
    .get();

Пример:

public static void main(String[] args) {
    class Stop {
        private final String stationName;
        private final int    passengerCount;

        Stop(final String stationName, final int passengerCount) {
            this.stationName    = stationName;
            this.passengerCount = passengerCount;
        }
    }

    List<Stop> stops = new LinkedList<>();

    stops.add(new Stop("Station1", 250));
    stops.add(new Stop("Station2", 275));
    stops.add(new Stop("Station3", 390));
    stops.add(new Stop("Station2", 210));
    stops.add(new Stop("Station1", 190));

    Stop firstStopAtStation1 = stops.stream()
            .filter(e -> e.stationName.equals("Station1"))
            .findFirst()
            .get();

    System.out.printf("At the first stop at Station1 there were %d passengers in the train.", firstStopAtStation1.passengerCount);
}

Выход:

At the first stop at Station1 there were 250 passengers in the train.
120
ответ дан ifloop 25 August 2018 в 15:30
поделиться

Когда вы пишете лямбда-выражение, список аргументов слева от -> может быть либо списком аргументов в скобках (возможно, пустым), либо единственным идентификатором без круглых скобок. Но во второй форме идентификатор не может быть объявлен с именем типа. Таким образом:

this.stops.stream().filter(Stop s-> s.getStation().getName().equals(name));

является некорректным синтаксисом; но

this.stops.stream().filter((Stop s)-> s.getStation().getName().equals(name));

верна. Или:

this.stops.stream().filter(s -> s.getStation().getName().equals(name));

также корректно, если у компилятора достаточно информации для определения типов.

2
ответ дан ajb 25 August 2018 в 15:30
поделиться
Другие вопросы по тегам:

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