---
sourceDocument: Xanadu API リファレンス
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/ja-JP/xanadu/api-reference

 Release :

    - xanadu

ft:locale :

    - ja-JP

ft:publication_title :

    - Xanadu API リファレンス

ft:clusterId :

    - crapiref

bundleId :

    - crapiref

workflow :

    - Creator


---

# ストリーム - スコープ対象、グローバル

# ストリーム - スコープ対象、グローバル {#ariaid-title1}

* リリースバージョン: Xanadu
* 
* 更新日 2024年08月01日
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 所要時間：24分

Stream API は、レコードなどのアイテムのストリームとやり取りするためのメソッドを提供します。例えば、forEach() メソッドを使用して、GlideQuery API によって返されるストリーム内の各レコードのステータスを更新できます。

Stream オブジェクトは以下の方法で取得できます。  
* コンストラクターを使用して Stream オブジェクトをインスタンス化する。
* GlideQuery.select() メソッドから Stream オブジェクトを返します。詳細については、「[GlideQuery](https://servicenow-prod.fluidtopics.net/RcspbEr5LZgw4kDXNxORuQ#GlideQueryGlobalAPI "GlideQuery スクリプトインクルードは、サーバーサイドスクリプトからレコードデータに対して CRUD 操作を実行するための GlideRecord API の代替です。")」を参照してください。
{#StreamGlobalAPI__ul_d3q_3dl_4mb}

このメソッドは静的であり、[fromArray()](https://servicenow-prod.fluidtopics.net/Fwsec3N9HR51D6IDogqYuQ#Stream-fromArray_O "指定されたアレイから取得した値を含む Stream オブジェクトを返します。") クラスのインスタンスを必要としません。

スコープ対象またはグローバルサーバー側スクリプトで Stream API を使用します。この API には GlideQuery \[com.sn_glidequery\] プラグインが必要です。

## 実装 {#StreamGlobalAPI__section_wqk_wwv_wmb}

この API は、メソッド呼び出しが連鎖していて、各メソッドが前のメソッドで返された結果に基づいて構築されるビルダーパターン。メソッドを使用してクエリの属性を定義します。メソッドは、ターミナルメソッド (クエリ結果を返すメソッド) を呼び出すまで実行されないため、クエリを実行する前にクエリの要件を定義できます。 内の [GlideQuery](https://servicenow-prod.fluidtopics.net/RcspbEr5LZgw4kDXNxORuQ#GlideQueryGlobalAPI "GlideQuery スクリプトインクルードは、サーバーサイドスクリプトからレコードデータに対して CRUD 操作を実行するための GlideRecord API の代替です。") および [Optional](https://servicenow-prod.fluidtopics.net/ebxdhN2~wupaDD_hW~vnuQ#OptionalGlobalAPI "Optional API は、GlideQuery、Stream、または GlideRecord API によって返される単一のレコードとやり取りします。当該の API が存在しない場合も同様です。null または未定義のクエリー結果を処理することでエラーになりにくいスクリプトを作成します。") API と連動します。

クエリが単一のレコードを返す場合、システムは Optional オブジェクトに結果をラップします。クエリがレコードのストリームを返す場合、システムは Stream オブジェクトに結果をラップします。これらのオブジェクトを使用すると、各 API で一連のメソッドを使用して結果を管理できます。

たとえば、この スクリプトはタスクテーブルでクエリを実行し、レコードを優先度別にグループ化して、合計再アサイン回数が 4 を超える各優先度を返します。{#StreamGlobalAPI__code-ex-desc}  

    var query = new global.GlideQuery('task')
        .where('active', true) //Returns new GlideQuery object with a "where" clause.
        .groupBy('priority') //Returns new GlideQuery object with a "group by" clause.
        .aggregate('sum', 'reassignment_count') //Returns new GlideQuery object with a "sum(reassignment_count)" clause.
        .having('sum', 'reassignment_count', '>', 4) //Returns new GlideQuery object with a "having reassignment_count > 4" clause.
        .select() //Returns a stream of records wrapped in a Stream object.  
        .forEach(function (priority){ //Terminal method in the Stream class that executes the query and returns the result. 
          gs.info("Priority " + priority.group.priority + ": " + priority.sum.reassignment_count + " reassignments");
        });

出力:

    Priority 1: 11 reassignments
    Priority 3: 6 reassignments
    Priority 5: 5 reassignments

## ターミナルメソッド {#StreamGlobalAPI__section_ldm_qjx_wmb}

パフォーマンス上の理由から、クエリーはターミナルメソッドを呼び出すときにのみデータをフェッチします。Stream クラスのターミナルメソッドは次のとおりです。

* [every()](https://servicenow-prod.fluidtopics.net/Fwsec3N9HR51D6IDogqYuQ#Stream-every_F "Stream オブジェクト内の全アイテムに述語関数を適用します。述語がストリーム内の全アイテムに対して true を返す場合、メソッドは true を返します。述語がストリーム内のいずれかのアイテムに対して false を返す場合、メソッドは false を返します。")
* [find()](https://servicenow-prod.fluidtopics.net/Fwsec3N9HR51D6IDogqYuQ#Stream-find_F "述語関数に一致する Stream オブジェクトの最初のレコードまたはアイテムを返します。述語関数が指定されていない場合、このメソッドはストリーム内の最初のレコードまたはアイテムを返します。")
* [forEach()](https://servicenow-prod.fluidtopics.net/Fwsec3N9HR51D6IDogqYuQ#Stream-forEach_F "指定された関数をストリーム内の各レコードまたはアイテムに適用します。")
* [reduce()](https://servicenow-prod.fluidtopics.net/Fwsec3N9HR51D6IDogqYuQ#Stream-reduce_F_A "ストリーム内の各アイテムに対して reducer 関数を実行し、単一の出力値を生成します。")
* [some()](https://servicenow-prod.fluidtopics.net/Fwsec3N9HR51D6IDogqYuQ#Stream-some_F "述語関数 (単一の値を受け取って true または false を返す関数) を、ストリーム内の各アイテムに適用します。述語がストリーム内のいずれかのアイテムに対して true を返す場合、メソッドは true を返します。")
* [toArray()](https://servicenow-prod.fluidtopics.net/Fwsec3N9HR51D6IDogqYuQ#Stream-toArray_N "ストリームから指定された数のアイテムを含むアレイを返します。")
{#StreamGlobalAPI__ul_u1m_2jd_smb}

## Stream - Stream(関数 nextFn) {#ariaid-title2}

Stream オブジェクトをインスタンス化します。
このコンストラクターを使用する代わりに、[GlideQuery](https://servicenow-prod.fluidtopics.net/RcspbEr5LZgw4kDXNxORuQ#GlideQueryGlobalAPI "GlideQuery スクリプトインクルードは、サーバーサイドスクリプトからレコードデータに対して CRUD 操作を実行するための GlideRecord API の代替です。") API を使用して、クエリーに基づいて Stream オブジェクトを返すことができます。
{#Stream-Stream_F__table_jx3_xbf_4mb__entry__3}

| 名前 | タイプ | 説明 |
|-|-|-|
| nextFn | 関数 | ストリーム内の次のアイテムを取得する関数。 |
[表 : 1. パラメーター]

{#Stream-Stream_F__table_jx3_xbf_4mb}  
この例では、乱数ジェネレーターに基づいて Stream オブジェクトを作成する方法を示します。無限ループが発生しないように、必ず limit() メソッドを含めてください。

    new Stream(Math.random)
       .map(Math.round)
       .map(function (num) { 
          return num === 1 ? 'heads' : 'tails'; 
       })
       .limit(10)
       .forEach(gs.info)

出力：

    *** Script: tails
    *** Script: heads
    *** Script: tails
    *** Script: heads
    *** Script: tails
    *** Script: heads
    *** Script: tails
    *** Script: tails
    *** Script: tails
    *** Script: tails

## Stream - chunk(数字 count) {#ariaid-title3}

結果をアレイのバッチで返します。それぞれのアレイには、メソッドに渡された数のレコードが含まれています。
{#Stream-chunk_N__table_lkw_rcf_4mb__entry__3}

| 名前 | タイプ | 説明 |
|-|-|-|
| count | 数字 | ストリームから返された各アレイ内のレコードの数。 |
[表 : 2. パラメーター]

{#Stream-chunk_N__table_lkw_rcf_4mb} {#Stream-chunk_N__table_mkw_rcf_4mb__entry__2}

| タイプ | 説明 |
|-|-|
| ストリーム | レコードなどのアイテムのストリームを操作するために使用されるオブジェクト。 |
[表 : 3. 返される内容]

{#Stream-chunk_N__table_mkw_rcf_4mb}  
この例は、テーブルをクエリーし、結果をアレイのバッチにチャンクする方法を示しています。

    var chunkResult = new GlideQuery('cmdb_ci_hardware')
        .select('asset', 'purchase_date')
        .limit(10)
        .chunk(5) //Returns arrays of 5 sys_ids at a time
        .forEach(function (chunk){ 
            gs.info(JSON.stringify(chunk, null, 2)); 
        });

出力：

    *** Script: [
      {
        "asset": "2fa9680d3790200044e0bfc8bcbe5dfb",
        "purchase_date": "2022-02-28",
        "sys_id": "2ba9680d3790200044e0bfc8bcbe5dfc"
      },
      {
        "asset": "73c1fa8837f3100044e0bfc8bcbe5ded",
        "purchase_date": "2017-12-05",
        "sys_id": "b4fd7c8437201000deeabfc8bcbe5dc1"
      },
      {
        "asset": "cbc1ba8837f3100044e0bfc8bcbe5dad",
        "purchase_date": "2017-12-05",
        "sys_id": "25fd3c8437201000deeabfc8bcbe5dea"
      },
      {
        "asset": "8fc1ba8837f3100044e0bfc8bcbe5da9",
        "purchase_date": null,
        "sys_id": "108a9205c611227500786e160f9d343e"
      },
      {
        "asset": "27c1fa8837f3100044e0bfc8bcbe5dd8",
        "purchase_date": "2017-06-06",
        "sys_id": "a9a2d111c611227601fb37542399caa8"
      }
    ]
    *** Script: [
      {
        "asset": "93c1fa8837f3100044e0bfc8bcbe5d30",
        "purchase_date": "2017-12-05",
        "sys_id": "6b43105c37301000deeabfc8bcbe5db2"
      },
      {
        "asset": "a2c0b1213784200044e0bfc8bcbe5de3",
        "purchase_date": "2017-12-05",
        "sys_id": "aac0b1213784200044e0bfc8bcbe5de3"
      },
      {
        "asset": "33c1fa8837f3100044e0bfc8bcbe5def",
        "purchase_date": "2017-12-05",
        "sys_id": "d0e8761137201000deeabfc8bcbe5da7"
      },
      {
        "asset": "53c1fa8837f3100044e0bfc8bcbe5d1f",
        "purchase_date": "2017-12-05",
        "sys_id": "53fdbc8437201000deeabfc8bcbe5d10"
      },
      {
        "asset": "f1c031213784200044e0bfc8bcbe5de0",
        "purchase_date": "2017-12-05",
        "sys_id": "71c031213784200044e0bfc8bcbe5de1"
      }
    ]

この例は、ID のバッチを使用して子クエリーを作成する方法を示しています。chunk() メソッドを使用した後に flatMap() メソッドを呼び出すと、個々のレコードではなくレコードのバッチが反復処理されます。

    var chunkResult = new global.GlideQuery('cmdb_ci_hardware')
        .select('sys_id')
        .map(function (device) { return device.sys_id; })
        .chunk(5) //Returns arrays of 5 sys_ids at a time
        .flatMap(function (deviceIds) {
            return new GlideQuery('cmdb_sam_sw_install')
                .where('installed_on', 'IN', deviceIds)
                .select('software_model', 'installed_on');
        })

    gs.info(JSON.stringify(chunkResult));

## Stream - every(関数 predicate) {#ariaid-title4}

Stream オブジェクト内の全アイテムに述語関数を適用します。述語がストリーム内の全アイテムに対して true を返す場合、メソッドは true を返します。述語がストリーム内のいずれかのアイテムに対して false を返す場合、メソッドは false を返します。
{#Stream-every_F__table_tyn_x2f_4mb__entry__3}

| 名前 | タイプ | 説明 |
|-|-|-|
| predicate | 関数 | Stream オブジェクト内の全レコードまたはアイテムに適用する述語関数。この関数は、ストリーム内の各アイテムを入力として受け取り、ブール値を返す必要があります。 |
[表 : 4. パラメーター]

{#Stream-every_F__table_tyn_x2f_4mb} {#Stream-every_F__table_uyn_x2f_4mb__entry__2}

| タイプ | 説明 |
|-|-|
| ブーリアン | 述語関数がストリーム内の全アイテムに対して true を返すかどうかを示すフラグ。 有効な値： * true：述語関数がストリーム内の全アイテムに対して true を返す。 * false：述語関数がストリーム内の全アイテムに対して true を返さない。 {#Stream-every_F__ul_ij5_1kg_tmb} |
[表 : 5. 返される内容]

{#Stream-every_F__table_uyn_x2f_4mb}  
この例では、ストリーム内の全アイテムに述語関数を適用する方法を示します。

    var hasOnlyShortDescriptions = new global.GlideQuery('task')
       .whereNotNull('description')
       .select('description')
       .every(function (t) { 
           return t.description.length < 10; 
           });

    gs.info(hasOnlyShortDescriptions);

出力：

    false

## Stream - filter(関数 predicate) {#ariaid-title5}

Stream オブジェクト内の各アイテムに述語関数を適用します。述語が true を返す場合、メソッドは true を返します。述語が false を返す場合は、空の Stream オブジェクトを返します。
パフォーマンスを向上させるには、可能であれば、GlideQuery クラスでこのメソッドではなく、where()、whereNotNull()、および whereNull() メソッドを使用します。「[GlideQuery()](https://servicenow-prod.fluidtopics.net/RcspbEr5LZgw4kDXNxORuQ#GlideQueryGlobalAPI "GlideQuery スクリプトインクルードは、サーバーサイドスクリプトからレコードデータに対して CRUD 操作を実行するための GlideRecord API の代替です。")」を参照してください。
{#Stream-filter_F__table_qyn_g1l_4mb__entry__3}

| 名前 | タイプ | 説明 |
|-|-|-|
| predicate | 関数 | Stream オブジェクト内の全レコードまたはアイテムに適用する述語関数。この関数は、ストリーム内の各アイテムを入力として受け取り、ブール値を返す必要があります。 |
[表 : 6. パラメーター]

{#Stream-filter_F__table_qyn_g1l_4mb} {#Stream-filter_F__table_fcd_j2f_4mb__entry__2}

| タイプ | 説明 |
|-|-|
| ストリーム | レコードなどのアイテムのストリームを操作するために使用されるオブジェクト。 |
[表 : 7. 返される内容]

{#Stream-filter_F__table_fcd_j2f_4mb}  
この例は、定義済みフィルターに対してタスクテーブル内のすべてのレコードを照合する方法を示しています。レコードがフィルターに一致すると、レコードのストリームが返されます。一致しなかった場合は、空の Stream オブジェクトが返されます。

    var shoutingTasks = new global.GlideQuery('task')
       .whereNotNull('description')
       .select('description')
       .filter(function (task) { 
           return task.description.toUpperCase() === task.description; 
       })

## Stream - find(関数 predicate) {#ariaid-title6}

述語関数に一致する Stream オブジェクトの最初のレコードまたはアイテムを返します。述語関数が指定されていない場合、このメソッドはストリーム内の最初のレコードまたはアイテムを返します。
{#Stream-find_F__table_gn4_k2f_4mb__entry__3}

| 名前 | タイプ | 説明 |
|-|-|-|
| predicate | 関数 | オプション。Stream オブジェクト内のアイテムに適用する述語関数。この関数は、ストリーム内の各アイテムを入力として受け取り、ブール値を返す必要があります。 |
[表 : 8. パラメーター]

{#Stream-find_F__table_gn4_k2f_4mb} {#Stream-find_F__table_hn4_k2f_4mb__entry__2}

| タイプ | 説明 |
|-|-|
| オプション | 返されたレコードを含むオブジェクト。 |
[表 : 9. 返される内容]

{#Stream-find_F__table_hn4_k2f_4mb}  
この例は、ストリームから最初のレコードを返す方法を示しています。

    var UserOptional = new global.GlideQuery('sys_user')
       .where('active', true)
       .where('company.name', 'ServiceNow')
       .select()
       .find()
       .map(function (user) { 
          return JSON.stringify(user); 
       })

    gs.info(UserOptional);

出力：

    Optional<{"sys_id":"babb4639b76233004fbc2089ee11a97f"}>

## Stream - flatMap(関数 fn) {#ariaid-title7}

Stream 内の全アイテムに関数を適用します。反復可能な別のストリームを返します。
関数によってレコードの 2 番目のストリームが返される場合は、map() の代わりにこのメソッドを使用します。
{#Stream-flatMap_F__table_nrd_tgf_4mb__entry__3}

| 名前 | タイプ | 説明 |
|-|-|-|
| fn | 関数 | Stream オブジェクトを返すクエリーの結果に適用する関数。 |
[表 : 10. パラメーター]

{#Stream-flatMap_F__table_nrd_tgf_4mb} {#Stream-flatMap_F__table_jjk_h2f_4mb__entry__2}

| タイプ | 説明 |
|-|-|
| ストリーム | 関数を適用した後に更新されたレコードのストリームを含むオブジェクト。 |
[表 : 11. 返される内容]

{#Stream-flatMap_F__table_jjk_h2f_4mb}  
この例では、ユーザーテーブルをクエリーして、その結果から子クエリーを作成する方法を示します。この例では N+1 クエリーを実行するため、パフォーマンスの問題が発生する可能性があります。このユースケースを本番環境で使用しないようにしてください。

    var records = new global.GlideQuery('sys_user')
       .where('last_login', '>', '2015-12-31')
       .select('first_name', 'last_name')
       .flatMap(function (u) {
          return new global.GlideQuery('task')
               .where('closed_by', u.sys_id)
               .select('closed_at', 'description')
               .map(function (t) {
                    return {
                        first_name: u.first_name,
                        last_name: u.last_name,
                        description: t.description,
                        closed_at: t.closed_at
                     };
               });
          })
       .limit(5)
       .toArray(100);

    gs.info(JSON.stringify(records));

出力：

    [
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-08-23 13:14:56"
       },
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-08-23 13:07:43"
       },
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-06-15 06:59:05"
       },
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-08-23 13:07:33"
       },
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-08-23 13:07:14"
       }
    ]

## Stream - forEach(関数 fn) {#ariaid-title8}

指定された関数をストリーム内の各レコードまたはアイテムに適用します。
{#Stream-forEach_F__table_nrd_tgf_4mb__entry__3}

| 名前 | タイプ | 説明 |
|-|-|-|
| fn | 関数 | ストリーム内の各アイテムに適用する関数。 |
[表 : 12. パラメーター]

{#Stream-forEach_F__table_nrd_tgf_4mb} {#Stream-forEach_F__table_emq_dff_4mb__entry__2}

| タイプ | 説明 |
|-|-|
| なし |   |
[表 : 13. 返される内容]

{#Stream-forEach_F__table_emq_dff_4mb}  
この例では、ストリーム内の各アイテムの結果を出力する方法を示します。

    var firstNames = new global.GlideQuery('sys_user')
       .select('first_name')
       .forEach(function (u) { 
          gs.debug(u.first_name); 
       });

出力：

    *** Script: [DEBUG] survey
    *** Script: [DEBUG] Lucius
    *** Script: [DEBUG] Jimmie
    *** Script: [DEBUG] Melinda
    *** Script: [DEBUG] Jewel
    *** Script: [DEBUG] Sean
    *** Script: [DEBUG] Jacinto
    *** Script: [DEBUG] Krystle
    *** Script: [DEBUG] Billie
    *** Script: [DEBUG] Christian
    *** Script: [DEBUG] Naomi
    ...

## Stream - fromArray(オブジェクト arr) {#ariaid-title9}

指定されたアレイから取得した値を含む Stream オブジェクトを返します。
注:  
このメソッドは静的です。このメソッドを使用するためにクラスのインスタンスは必要ありません。
{#Stream-fromArray_O__table_qdh_jff_4mb__entry__3}

| 名前 | タイプ | 説明 |
|-|-|-|
| arr | アレイ | ストリームの作成元となる値のアレイ。 |
[表 : 14. パラメーター]

{#Stream-fromArray_O__table_qdh_jff_4mb} {#Stream-fromArray_O__table_rdh_jff_4mb__entry__2}

| タイプ | 説明 |
|-|-|
| ストリーム | レコードなどのアイテムのストリームを操作するために使用されるオブジェクト。 |
[表 : 15. 返される内容]

{#Stream-fromArray_O__table_rdh_jff_4mb}  
この例では、値のアレイを含む Stream オブジェクトを作成する方法を示します。

    var nameStream = Stream.fromArray(['Bob', 'Sue', 'Sam'])
       .map(function (name) { 
          return name.toUpperCase(); 
       })
       .toArray(3);

    gs.info(JSON.stringify(nameStream));

出力：

    ["BOB","SUE","SAM"]

## Stream - limit(数字 count) {#ariaid-title10}

ストリームによって返される結果の数を制限します。
パフォーマンスを向上させるには、可能であれば GlideQuery クラスで limit() メソッドを使用します。「[GlideQuery()](https://servicenow-prod.fluidtopics.net/RcspbEr5LZgw4kDXNxORuQ#GlideQueryGlobalAPI "GlideQuery スクリプトインクルードは、サーバーサイドスクリプトからレコードデータに対して CRUD 操作を実行するための GlideRecord API の代替です。")」を参照してください。必要に応じて、このメソッドで Stream.flatMap() メソッドを使用して結果を制限します。
{#Stream-limit_N__table_gvh_2mc_nmb__entry__3}

| 名前 | タイプ | 説明 |
|-|-|-|
| count | 数字 | 返されるレコードの数。 |
[表 : 16. パラメーター]

{#Stream-limit_N__table_gvh_2mc_nmb} {#Stream-limit_N__table_xhc_zbf_4mb__entry__2}

| タイプ | 説明 |
|-|-|
| ストリーム | レコードなどのアイテムのストリームを操作するために使用されるオブジェクト。 |
[表 : 17. 返される内容]

{#Stream-limit_N__table_xhc_zbf_4mb}  
この例は、Stream.flatMap() メソッドから返される結果を制限する方法を示しています。

    var records = new global.GlideQuery('sys_user')
       .where('last_login', '>', '2015-12-31')
       .select('first_name', 'last_name')
       .flatMap(function (u) {
          return new GlideQuery('task')
               .where('closed_by', u.sys_id)
               .select('closed_at', 'description')
               .map(function (t) {
                    return {
                        first_name: u.first_name,
                        last_name: u.last_name,
                        description: t.description,
                        closed_at: t.closed_at
                     };
               });
          })
       .limit(5)
       .forEach(function (task){
          gs.info(JSON.stringify(task, null, 2));
       });

出力：

    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:16"
    }
    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:22"
    }
    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:27"
    }
    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:31"
    }
    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:54"
    }

## Stream - map(関数 fn) {#ariaid-title11}

ストリーム内の各アイテムに関数を適用し、更新後の Stream オブジェクトを返します。
{#Stream-map_F__table_zkh_rgf_4mb__entry__3}

| 名前 | タイプ | 説明 |
|-|-|-|
| fn | 関数 | ストリーム内の各アイテムを入力として受け取るクエリーの結果に適用する関数。 |
[表 : 18. パラメーター]

{#Stream-map_F__table_zkh_rgf_4mb} {#Stream-map_F__table_pct_xdf_4mb__entry__2}

| タイプ | 説明 |
|-|-|
| ストリーム | 関数を適用した後に更新されたレコードのストリームを含むオブジェクト。 |
[表 : 19. 返される内容]

{#Stream-map_F__table_pct_xdf_4mb}  
この例では、ストリーム内の全アイテムに関数を適用する方法を示します。

    var users = new global.GlideQuery('sys_user')
       .whereNotNull('first_name')
       .select('first_name')
       .map(function (u) { 
          return u.first_name.toUpperCase(); 
       })
       .toArray(100);

    gs.info(JSON.stringify(users));

出力：

    [
       "SURVEY",
       "LUCIUS",
       "JIMMIE",
       "MELINDA",
       "JEWEL",
       "SEAN",
       "JACINTO",
       "KRYSTLE",
       "BILLIE",
       "CHRISTIAN",
       ...
    ]

## Stream - reduce(関数 reducerFn, 任意 initialValue) {#ariaid-title12}

ストリーム内の各アイテムに対して reducer 関数を実行し、単一の出力値を生成します。
このメソッドは、ネイティブの JavaScript の reduce() メソッドに類似しています。詳細については、[w3schools のドキュメント](https://www.w3schools.com/jsref/jsref_reduce.asp)を参照してください。
{#Stream-reduce_F_A__table_ogx_bff_4mb__entry__3}

| 名前 | タイプ | 説明 |
|-|-|-|
| reducerFn | 関数 | ストリーム内の各アイテムに適用して、ストリームを単一の値に減らす関数。この関数は次の 2 つの引数を取る必要があります。 * `acc`：関数によって返されたすべての値を累積するアキュムレーター。 * `cur`：アレイに累積されている現在のアイテム。 {#Stream-reduce_F_A__ul_k1m_yd3_5mb} |
| initialValue | 任意 | 初期値として関数に渡される値。 |
[表 : 20. パラメーター]

{#Stream-reduce_F_A__table_ogx_bff_4mb} {#Stream-reduce_F_A__table_pgx_bff_4mb__entry__2}

| タイプ | 説明 |
|-|-|
| 任意 | reducer 関数によって返されたすべてのアイテムの累計。 |
[表 : 21. 返される内容]

{#Stream-reduce_F_A__table_pgx_bff_4mb}  
この例では、ユーザーテーブルから最も長い名前のレコードを返す方法を示しています。

    var longestName = new global.GlideQuery('sys_user')
       .whereNotNull('first_name')
       .select('first_name')
       .reduce(function (acc, cur) {
           return cur.first_name.length > acc.length
               ? cur.first_name
               : acc;
           }, '');

    gs.info(JSON.stringify(longestName));

出力：

    "ATF_TestItilUser1"

## Stream - some(関数 predicate) {#ariaid-title13}

述語関数 (単一の値を受け取って true または false を返す関数) を、ストリーム内の各アイテムに適用します。述語がストリーム内のいずれかのアイテムに対して true を返す場合、メソッドは true を返します。
{#Stream-some_F__table_q4v_v2f_4mb__entry__3}

| 名前 | タイプ | 説明 |
|-|-|-|
| predicate | 関数 | Stream オブジェクト内のアイテムに適用する述語関数。ブーリアン値を返す必要があります。 |
[表 : 22. パラメーター]

{#Stream-some_F__table_q4v_v2f_4mb} {#Stream-some_F__table_r4v_v2f_4mb__entry__2}

| タイプ | 説明 |
|-|-|
| ブーリアン | 述語関数がストリーム内のアイテムに対して true を返したかどうかを示すフラグ。 有効な値： * true：述語関数がストリーム内のアイテムに対して true を返した。 * false：述語関数がストリーム内のアイテムに対して true を返さなかった。 {#Stream-some_F__ul_iwm_q33_5mb} |
[表 : 23. 返される内容]

{#Stream-some_F__table_r4v_v2f_4mb}  
この例は、タスクテーブル内の説明が 1,000 文字を超えているかどうかを確認する方法を示しています。

    var hasLongDescriptions = new global.GlideQuery('task')
       .whereNotNull('description')
       .select('description')
       .some(function (t) { 
          return t.description.length > 1000; 
       });


    gs.info(hasLongDescriptions);

出力：

    false

## Stream - toArray(数字 count) {#ariaid-title14}

ストリームから指定された数のアイテムを含むアレイを返します。
{#Stream-toArray_N__table_acv_y2f_4mb__entry__3}

| 名前 | タイプ | 説明 |
|-|-|-|
| count | 数字 | ストリームがアレイ内で返すアイテムの最大数。 |
[表 : 24. パラメーター]

{#Stream-toArray_N__table_acv_y2f_4mb} {#Stream-toArray_N__table_bcv_y2f_4mb__entry__2}

| タイプ | 説明 |
|-|-|
| アレイ | ストリームから返された、指定の数のアイテムを含むアレイ。 |
[表 : 25. 返される内容]

{#Stream-toArray_N__table_bcv_y2f_4mb}  
この例では、レコードのストリームを JavaScript アレイに変換する方法を示します。

    var users = new global.GlideQuery('sys_user')
        .limit(10)
        .select('first_name', 'last_name')
        .toArray(50);

    gs.info(JSON.stringify(users));

出力：

    [
       {
          "first_name":"Jewel",
          "last_name":"Agresta",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d64"
       },
       {
          "first_name":"Sean",
          "last_name":"Bonnet",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d6d"
       },
       {
          "first_name":"Jacinto",
          "last_name":"Gawron",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d76"
       },
       {
          "first_name":"Krystle",
          "last_name":"Stika",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d7f"
       },
       {
          "first_name":"Billie",
          "last_name":"Cowley",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d88"
       },
       {
          "first_name":"Christian",
          "last_name":"Marnell",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d91"
       }
    ]


