Ich habe den Eingabe- / Ausgabetyp von Java Lambda ~ Map Edition ~ ausprobiert

Für die Eingabe- / Ausgabetypen von Java Lambda können verschiedene Muster verwendet werden.

Im offiziellen Dokument ist es in [hier] geschrieben (https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-handler.html#java-handler-types).

Zunächst von der Map-Methode.

Dies ist der Eingabe-JSON, der an die Lambda-Funktion übergeben werden soll.

{
    "name": "orange juice",
    "price": 1000,
    "releaseDate": 1601606387939,
    "rate": 4.5,
    "rawMaterial": ["orange", "fragrance"],
    "size": {
        "height": 10,
        "width": 20,
        "depth": 30
    }
}

Der folgende Code behandelt diesen Eingabe-JSON als Map, schreibt ihn in die Standardausgabe und verwendet Map auch zum Ausgeben eines anderen JSON.

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MapFunction implements RequestHandler<Map<String, Object>, Map<String, Object>> {
    @Override
    public Map<String, Object> handleRequest(Map<String, Object> event, Context context) {
        String name = (String) event.get("name");
        System.out.println(name); // orange juice

        Integer price = (Integer) event.get("price");
        System.out.println(price); // 1000

        Long releaseDate = (Long) event.get("releaseDate");
        System.out.println(releaseDate); // 1601606387939

        Double rate = (Double) event.get("rate");
        System.out.println(rate); // 4.5

        List<String> rawMaterial = (List<String>) event.get("rawMaterial");
        System.out.println(rawMaterial); // [orange, fragrance]

        Map<String, Integer> size = (Map<String, Integer>) event.get("size");
        Integer height = size.get("height");
        System.out.println(height); // 10

        Integer width = size.get("width");
        System.out.println(width); // 20

        Integer depth = size.get("depth");
        System.out.println(depth); // 30

        Map<String, Object> response = new HashMap<>();
        response.put("name", "coffee");
        response.put("price", Integer.valueOf(500));
        response.put("releaseDate", System.currentTimeMillis());
        response.put("rate", Double.valueOf(4.2));
        response.put("rawMaterial", Arrays.asList("coffee", "sugar"));

        Map<String, Integer> responseSize = new HashMap<>();
        responseSize.put("height", Integer.valueOf(100));
        responseSize.put("width", Integer.valueOf(200));
        responseSize.put("depth", Integer.valueOf(300));
        response.put("size", responseSize);

        return response;
    }
}

Jeder Wert wird entsprechend dem JSON-Typ in String, Integer, Long, Double konvertiert. Ein Array wird in eine Liste und ein assoziatives Array in eine Map konvertiert.

Wenn ich diese Lambda-Funktion ausführe, wird dieser JSON ausgegeben.

{
  "size": {
    "depth": 300,
    "width": 200,
    "height": 100
  },
  "releaseDate": 1601615397265,
  "rate": 4.2,
  "price": 500,
  "rawMaterial": [
    "coffee",
    "sugar"
  ],
  "name": "coffee"
}

Da ich HashMap verwende, ist die Reihenfolge nicht in Ordnung. Wenn Sie beispielsweise TreeMap anstelle von HashMap verwenden, wird die Reihenfolge beibehalten. Es ist jedoch wünschenswert, dass der Empfänger dieses JSON es auftragsunabhängig implementiert.

Wie Sie sehen können, können Sie mit Java Lambda mithilfe des Map-Typs mit JSON arbeiten. Sie können Code schreiben, ohne weitere Klassen hinzuzufügen, aber Sie werden mit einem Cast Storm enden und es ist nicht typsicher. Im nächsten Artikel werde ich eine POJO-Methode vorstellen, die dieses Problem lösen kann.

Ich habe den Eingabe- / Ausgabetyp von Java Lambda ~ POJO Edition ~ ausprobiert https://qiita.com/kazfuku/items/095b4fb9c37638f57457

Recommended Posts

Ich habe den Eingabe- / Ausgabetyp von Java Lambda ~ Map Edition ~ ausprobiert
Ich habe den Eingabe- / Ausgabetyp von Java Lambda ~ POJO Edition ~ ausprobiert
Ich habe den Eingabe- / Ausgabetyp von Java Lambda ~ Stream Version ~ ausprobiert
[Java] Achten Sie auf den Schlüsseltyp der Karte
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
Ich habe das Java-Framework "Quarkus" ausprobiert.
Der Ursprung von Java-Lambda-Ausdrücken
Ich habe versucht, Google HttpClient von Java zu verwenden
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
Ich habe versucht, Java-Lambda-Ausdrücke zusammenzufassen
[Tag: 5] Ich habe die Grundlagen von Java zusammengefasst
Ausgabe des Buches "Einführung in Java"
Ich habe versucht, den Zugriff von Lambda → Athena mit AWS X-Ray zu visualisieren
Ich habe die Eigenschaften von Java und .NET verglichen
Ich habe versucht, neunundneunzig in Java auszugeben
Ich habe versucht, den Profiler von IntelliJ IDEA zu verwenden
Probieren Sie Progate Free Edition [Java I]
Ich kann mich nicht an die Eingabe / Ausgabe von Textdateien in Java erinnern, also habe ich sie zusammengefasst.
Ich habe versucht, die Server-Push-Funktion von Servlet 4.0 zu verwenden
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
Verwenden Sie Java-Lambda-Ausdrücke außerhalb der Stream-API
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren
Ich habe den neuen Feature-Profiler von IntelliJ IDEA 2019.2 ausprobiert.
Ich habe die Typen und Grundlagen von Java-Ausnahmen zusammengefasst
Paiza Skill Check Standard Eingabe / Ausgabe Zusammenfassung [Java Edition]
Ich habe versucht, die Methode der gegenseitigen Teilung von Eugrid in Java zu implementieren
Ich habe mir die Rosen von Versailles angesehen und versucht, das Schlusslied in Java zu reproduzieren
Ein Java-Benutzer hat vor einem Dutzend Jahren versucht, die Funktionen von Java8 (Lambda Style Edition) zu untersuchen.
Ich möchte mit Java8 StreamAPI redu () einen anderen Typ als das Eingabeelement zurückgeben.
[Hinweis] Java Ausgabe der Summe von ungeraden und geraden Elementen
Ich habe das Verhalten von Java Scanner und .nextLine () nicht wirklich verstanden.
[JDBC] Ich habe versucht, von Java aus auf die SQLite3-Datenbank zuzugreifen.
Objektorientiertes Kind !? Ich habe Deep Learning mit Java ausprobiert (Testversion)
Ich möchte die Protokollausgabeeinstellung von UtilLoggingJdbcLogger ändern
Ich habe JAX-RS ausprobiert und mir das Verfahren notiert
[Java] Um die Typinformationen der Typparameter zur Laufzeit zu kennen
Ich habe die grundlegende Grammatik von Ruby kurz zusammengefasst
Ich habe versucht, in Java von einer Zeichenfolge in einen LocalDate-Typ zu konvertieren
Ich habe versucht, eine Umgebung mit WSL2 + Docker + VSCode zu erstellen
Ich habe einen RESAS-API-Client in Java erstellt
Ich habe versucht, die CameraX-Bibliothek mit Android Java Fragment zu verwenden
[Java] Ich möchte Standardeingabe und Standardausgabe mit JUnit testen
[Java] Ich habe über die Vorzüge und Verwendungen von "Schnittstelle" nachgedacht.
Ich habe Drools (Java, InputStream) ausprobiert.
Ich habe versucht, Java REPL zu verwenden
Ich habe das FizzBuzz-Problem ausprobiert
[Java] Ich habe versucht, die Kombination zu implementieren.
Ich habe den Konstruktor (Java) studiert.
Ich habe versucht, Metaprogrammierung mit Java
Eingabe in die Java-Konsole
[Java] Ich fühlte mich als Java-Anfänger. "Warum wird das erste Zeichen nur im String-Typ großgeschrieben?" Ich sah mich dem String-Typ gegenüber.
Ich habe versucht, das Problem der "mehrstufigen Auswahl" mit Ruby zu lösen
Untersuchen Sie die Systeminformationen der AWS Lambda-Betriebsumgebung in Java
Ich habe versucht zusammenzufassen, was bei der Site-Java-Ausgabe gefragt wurde.