private void copyNames(VCard card, Map<String, Object> contact) {
    StructuredName structuredName = card.getStructuredName();
    if (structuredName != null) {
      safeSet("givenName", structuredName.getGiven(), contact);
      safeSet("surname", structuredName.getFamily(), contact);
      // MS contacts only allows one middle name - take the first one
      if (!structuredName.getAdditionalNames().isEmpty()) {
        safeSet("middleName", structuredName.getAdditionalNames().get(0), contact);
      }
      // MS contacts only allows one prefix - take the first one
      if (!structuredName.getPrefixes().isEmpty()) {
        safeSet("title", structuredName.getPrefixes().get(0), contact);
      }
    }
    safeSet("displayName", card.getFormattedName(), contact);
    safeSet("nickName", card.getNickname(), contact);
  }
Maps from a VCard to a Microsoft Graph contacts resource as defined by
https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/resources/contact.
extensions/data-transfer/portability-data-transfer-microsoft/src/main/java/org/datatransferproject/transfer/microsoft/transformer/contacts/ToGraphContactTransformer.java