diff --git a/pom.xml b/pom.xml
index 52c3d735bcf53e551277ee7c71043dd1d8e77b1b..d789c5e4936c5b203dac3d53055396fb3e960464 100644
--- a/pom.xml
+++ b/pom.xml
@@ -60,7 +60,7 @@
 		<crawler.version>1.0.9-SNAPSHOT</crawler.version>
 
 		<!-- Suggest -->
-		<suggest.version>2.1.4-SNAPSHOT</suggest.version>
+		<suggest.version>2.2.0-SNAPSHOT</suggest.version>
 
 		<!-- Elasticsearch -->
 		<elasticsearch.version>2.3.2</elasticsearch.version>
@@ -1054,7 +1054,7 @@
 		<dependency>
 			<groupId>org.codelibs</groupId>
 			<artifactId>corelib</artifactId>
-			<version>0.3.4</version>
+			<version>0.3.5-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>commons-io</groupId>
diff --git a/src/main/java/org/codelibs/fess/api/suggest/SuggestApiManager.java b/src/main/java/org/codelibs/fess/api/suggest/SuggestApiManager.java
index 21699a2b245a5b0f69b842821e98c2ab7cb5c25d..af5a66e055958d9c1f42198a363a18b6e607c868 100644
--- a/src/main/java/org/codelibs/fess/api/suggest/SuggestApiManager.java
+++ b/src/main/java/org/codelibs/fess/api/suggest/SuggestApiManager.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.api.suggest;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.io.IOException;
 
 import javax.annotation.Resource;
@@ -34,7 +36,6 @@ import org.codelibs.fess.suggest.entity.SuggestItem;
 import org.codelibs.fess.suggest.request.suggest.SuggestRequestBuilder;
 import org.codelibs.fess.suggest.request.suggest.SuggestResponse;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -69,7 +70,7 @@ public class SuggestApiManager extends BaseApiManager {
             final SuggestHelper suggestHelper = ComponentUtil.getSuggestHelper();
             final SuggestRequestBuilder builder = suggestHelper.suggester().suggest();
             builder.setQuery(parameter.getQuery());
-            StreamUtil.of(parameter.getFields()).forEach(field -> builder.addField(field));
+            stream(parameter.getFields()).of(stream -> stream.forEach(field -> builder.addField(field)));
             roleQueryHelper.build().stream().forEach(role -> builder.addRole(role));
             builder.setSize(parameter.getNum());
 
diff --git a/src/main/java/org/codelibs/fess/app/service/GroupService.java b/src/main/java/org/codelibs/fess/app/service/GroupService.java
index f129abb7d3795beecd517976efcacb904fb35c2d..fbea37de98318c58438dede90f7aa80841979b19 100644
--- a/src/main/java/org/codelibs/fess/app/service/GroupService.java
+++ b/src/main/java/org/codelibs/fess/app/service/GroupService.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.app.service;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.io.Serializable;
 import java.util.List;
 
@@ -29,7 +31,6 @@ import org.codelibs.fess.es.user.exbhv.UserBhv;
 import org.codelibs.fess.es.user.exentity.Group;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.dbflute.cbean.result.PagingResultBean;
 import org.dbflute.optional.OptionalEntity;
 
@@ -85,12 +86,15 @@ public class GroupService implements Serializable {
             op.setRefresh(true);
         });
 
-        userBhv.selectCursor(cb -> {
-            cb.query().setGroups_Equal(group.getId());
-        }, entity -> {
-            entity.setGroups(StreamUtil.of(entity.getGroups()).filter(s -> !s.equals(group.getId())).toArray(n -> new String[n]));
-            userBhv.insertOrUpdate(entity);
-        });
+        userBhv.selectCursor(
+                cb -> {
+                    cb.query().setGroups_Equal(group.getId());
+                },
+                entity -> {
+                    entity.setGroups(stream(entity.getGroups()).get(
+                            stream -> stream.filter(s -> !s.equals(group.getId())).toArray(n -> new String[n])));
+                    userBhv.insertOrUpdate(entity);
+                });
 
     }
 
diff --git a/src/main/java/org/codelibs/fess/app/service/RoleService.java b/src/main/java/org/codelibs/fess/app/service/RoleService.java
index 779de94076b48a6808f7a6a567c61cfba97a74e1..4b787438653646e3e7ca43137d9bbaa70e67396e 100644
--- a/src/main/java/org/codelibs/fess/app/service/RoleService.java
+++ b/src/main/java/org/codelibs/fess/app/service/RoleService.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.app.service;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.io.Serializable;
 import java.util.List;
 
@@ -29,7 +31,6 @@ import org.codelibs.fess.es.user.exbhv.UserBhv;
 import org.codelibs.fess.es.user.exentity.Role;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.dbflute.cbean.result.PagingResultBean;
 import org.dbflute.optional.OptionalEntity;
 
@@ -82,12 +83,15 @@ public class RoleService implements Serializable {
             op.setRefresh(true);
         });
 
-        userBhv.selectCursor(cb -> {
-            cb.query().setRoles_Equal(role.getId());
-        }, entity -> {
-            entity.setRoles(StreamUtil.of(entity.getRoles()).filter(s -> !s.equals(role.getId())).toArray(n -> new String[n]));
-            userBhv.insertOrUpdate(entity);
-        });
+        userBhv.selectCursor(
+                cb -> {
+                    cb.query().setRoles_Equal(role.getId());
+                },
+                entity -> {
+                    entity.setRoles(stream(entity.getRoles()).get(
+                            stream -> stream.filter(s -> !s.equals(role.getId())).toArray(n -> new String[n])));
+                    userBhv.insertOrUpdate(entity);
+                });
     }
 
     protected void setupListCondition(final RoleCB cb, final RolePager rolePager) {
diff --git a/src/main/java/org/codelibs/fess/app/web/admin/backup/AdminBackupAction.java b/src/main/java/org/codelibs/fess/app/web/admin/backup/AdminBackupAction.java
index d18463324a870a56e9916af1eeedfde2745e8f3b..8b5daa902859d8e3b8b9752d334c60c77f7fa629 100644
--- a/src/main/java/org/codelibs/fess/app/web/admin/backup/AdminBackupAction.java
+++ b/src/main/java/org/codelibs/fess/app/web/admin/backup/AdminBackupAction.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.app.web.admin.backup;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -26,7 +28,6 @@ import org.codelibs.elasticsearch.runner.net.CurlResponse;
 import org.codelibs.fess.app.web.base.FessAdminAction;
 import org.codelibs.fess.util.RenderDataUtil;
 import org.codelibs.fess.util.ResourceUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.lastaflute.web.Execute;
 import org.lastaflute.web.response.ActionResponse;
 import org.lastaflute.web.response.HtmlResponse;
@@ -50,7 +51,7 @@ public class AdminBackupAction extends FessAdminAction {
 
     @Execute
     public ActionResponse download(final String id) {
-        if (StreamUtil.of(fessConfig.getIndexBackupTargetsAsArray()).anyMatch(s -> s.equals(id))) {
+        if (stream(fessConfig.getIndexBackupTargetsAsArray()).get(stream -> stream.anyMatch(s -> s.equals(id)))) {
             return asStream(id + ".bulk").contentTypeOctetStream().stream(
                     out -> {
                         try (CurlResponse response =
@@ -66,12 +67,13 @@ public class AdminBackupAction extends FessAdminAction {
     }
 
     private List<Map<String, String>> getBackupItems() {
-        return StreamUtil.of(fessConfig.getIndexBackupTargetsAsArray()).filter(name -> StringUtil.isNotBlank(name)).map(name -> {
-            final Map<String, String> map = new HashMap<>();
-            map.put("id", name);
-            map.put("name", name);
-            return map;
-        }).collect(Collectors.toList());
+        return stream(fessConfig.getIndexBackupTargetsAsArray()).get(
+                stream -> stream.filter(name -> StringUtil.isNotBlank(name)).map(name -> {
+                    final Map<String, String> map = new HashMap<>();
+                    map.put("id", name);
+                    map.put("name", name);
+                    return map;
+                }).collect(Collectors.toList()));
     }
 
     private HtmlResponse asIndexHtml() {
diff --git a/src/main/java/org/codelibs/fess/app/web/admin/dataconfig/AdminDataconfigAction.java b/src/main/java/org/codelibs/fess/app/web/admin/dataconfig/AdminDataconfigAction.java
index f16834e0fc1a4d9202c6fd1a566c8f433282fb9d..1e896feb97b48baf4755b5e418f17ffda4d3a087 100644
--- a/src/main/java/org/codelibs/fess/app/web/admin/dataconfig/AdminDataconfigAction.java
+++ b/src/main/java/org/codelibs/fess/app/web/admin/dataconfig/AdminDataconfigAction.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.app.web.admin.dataconfig;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -37,7 +39,6 @@ import org.codelibs.fess.es.config.exentity.DataConfig;
 import org.codelibs.fess.helper.PermissionHelper;
 import org.codelibs.fess.util.ComponentUtil;
 import org.codelibs.fess.util.RenderDataUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.dbflute.optional.OptionalEntity;
 import org.dbflute.optional.OptionalThing;
 import org.lastaflute.web.Execute;
@@ -148,8 +149,9 @@ public class AdminDataconfigAction extends FessAdminAction {
                             });
                             final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
                             form.permissions =
-                                    StreamUtil.of(entity.getPermissions()).map(s -> permissionHelper.decode(s))
-                                            .filter(s -> StringUtil.isNotBlank(s)).distinct().collect(Collectors.joining("\n"));
+                                    stream(entity.getPermissions()).get(
+                                            stream -> stream.map(s -> permissionHelper.decode(s)).filter(s -> StringUtil.isNotBlank(s))
+                                                    .distinct().collect(Collectors.joining("\n")));
                         }).orElse(() -> {
                     throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), () -> asListHtml());
                 });
@@ -185,9 +187,10 @@ public class AdminDataconfigAction extends FessAdminAction {
                                             });
                                             final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
                                             form.permissions =
-                                                    StreamUtil.of(entity.getPermissions()).map(s -> permissionHelper.decode(s))
-                                                            .filter(s -> StringUtil.isNotBlank(s)).distinct()
-                                                            .collect(Collectors.joining("\n"));
+                                                    stream(entity.getPermissions()).get(
+                                                            stream -> stream.map(s -> permissionHelper.decode(s))
+                                                                    .filter(s -> StringUtil.isNotBlank(s)).distinct()
+                                                                    .collect(Collectors.joining("\n")));
                                             form.crudMode = crudMode;
                                         })
                                 .orElse(() -> {
@@ -300,8 +303,9 @@ public class AdminDataconfigAction extends FessAdminAction {
                             op -> op.exclude(Stream.concat(Stream.of(Constants.COMMON_CONVERSION_RULE), Stream.of("permissions")).toArray(
                                     n -> new String[n])));
                     final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
-                    entity.setPermissions(StreamUtil.of(form.permissions.split("\n")).map(s -> permissionHelper.encode(s))
-                            .filter(s -> StringUtil.isNotBlank(s)).distinct().toArray(n -> new String[n]));
+                    entity.setPermissions(stream(form.permissions.split("\n")).get(
+                            stream -> stream.map(s -> permissionHelper.encode(s)).filter(s -> StringUtil.isNotBlank(s)).distinct()
+                                    .toArray(n -> new String[n])));
                     return entity;
                 });
     }
diff --git a/src/main/java/org/codelibs/fess/app/web/admin/dict/seunjeon/AdminDictSeunjeonAction.java b/src/main/java/org/codelibs/fess/app/web/admin/dict/seunjeon/AdminDictSeunjeonAction.java
index d59b535dc6de7cf6c95fbc035673b38c690585bd..ca725daf599d4385f7a4e72d8805790e02998b32 100644
--- a/src/main/java/org/codelibs/fess/app/web/admin/dict/seunjeon/AdminDictSeunjeonAction.java
+++ b/src/main/java/org/codelibs/fess/app/web/admin/dict/seunjeon/AdminDictSeunjeonAction.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.app.web.admin.dict.seunjeon;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
@@ -32,7 +34,6 @@ import org.codelibs.fess.app.web.admin.dict.AdminDictAction;
 import org.codelibs.fess.app.web.base.FessAdminAction;
 import org.codelibs.fess.dict.seunjeon.SeunjeonItem;
 import org.codelibs.fess.util.RenderDataUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.dbflute.optional.OptionalEntity;
 import org.dbflute.optional.OptionalThing;
 import org.lastaflute.web.Execute;
@@ -363,7 +364,8 @@ public class AdminDictSeunjeonAction extends FessAdminAction {
         if (StringUtil.isBlank(value)) {
             return StringUtil.EMPTY_STRINGS;
         }
-        return StreamUtil.of(value.split(",")).filter(s -> StringUtil.isNotBlank(s)).map(s -> s.trim()).toArray(n -> new String[n]);
+        return stream(value.split(",")).get(
+                stream -> stream.filter(s -> StringUtil.isNotBlank(s)).map(s -> s.trim()).toArray(n -> new String[n]));
     }
 
     // ===================================================================================
diff --git a/src/main/java/org/codelibs/fess/app/web/admin/fileconfig/AdminFileconfigAction.java b/src/main/java/org/codelibs/fess/app/web/admin/fileconfig/AdminFileconfigAction.java
index 88f8488f0901350113f89ef6bb7ec5d860338ca7..255fe8b18e8645e419665788db94ef1688fea2b9 100644
--- a/src/main/java/org/codelibs/fess/app/web/admin/fileconfig/AdminFileconfigAction.java
+++ b/src/main/java/org/codelibs/fess/app/web/admin/fileconfig/AdminFileconfigAction.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.app.web.admin.fileconfig;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -32,7 +34,6 @@ import org.codelibs.fess.es.config.exentity.FileConfig;
 import org.codelibs.fess.helper.PermissionHelper;
 import org.codelibs.fess.util.ComponentUtil;
 import org.codelibs.fess.util.RenderDataUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.dbflute.optional.OptionalEntity;
 import org.dbflute.optional.OptionalThing;
 import org.lastaflute.web.Execute;
@@ -143,8 +144,9 @@ public class AdminFileconfigAction extends FessAdminAction {
                             });
                             final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
                             form.permissions =
-                                    StreamUtil.of(entity.getPermissions()).map(s -> permissionHelper.decode(s))
-                                            .filter(s -> StringUtil.isNotBlank(s)).distinct().collect(Collectors.joining("\n"));
+                                    stream(entity.getPermissions()).get(
+                                            stream -> stream.map(s -> permissionHelper.decode(s)).filter(s -> StringUtil.isNotBlank(s))
+                                                    .distinct().collect(Collectors.joining("\n")));
                         }).orElse(() -> {
                     throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), () -> asListHtml());
                 });
@@ -180,9 +182,10 @@ public class AdminFileconfigAction extends FessAdminAction {
                                             });
                                             final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
                                             form.permissions =
-                                                    StreamUtil.of(entity.getPermissions()).map(s -> permissionHelper.decode(s))
-                                                            .filter(s -> StringUtil.isNotBlank(s)).distinct()
-                                                            .collect(Collectors.joining("\n"));
+                                                    stream(entity.getPermissions()).get(
+                                                            stream -> stream.map(s -> permissionHelper.decode(s))
+                                                                    .filter(s -> StringUtil.isNotBlank(s)).distinct()
+                                                                    .collect(Collectors.joining("\n")));
                                             form.crudMode = crudMode;
                                         })
                                 .orElse(() -> {
@@ -297,8 +300,9 @@ public class AdminFileconfigAction extends FessAdminAction {
                             op -> op.exclude(Stream.concat(Stream.of(Constants.COMMON_CONVERSION_RULE), Stream.of("permissions")).toArray(
                                     n -> new String[n])));
                     final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
-                    entity.setPermissions(StreamUtil.of(form.permissions.split("\n")).map(s -> permissionHelper.encode(s))
-                            .filter(s -> StringUtil.isNotBlank(s)).distinct().toArray(n -> new String[n]));
+                    entity.setPermissions(stream(form.permissions.split("\n")).get(
+                            stream -> stream.map(s -> permissionHelper.encode(s)).filter(s -> StringUtil.isNotBlank(s)).distinct()
+                                    .toArray(n -> new String[n])));
                     return entity;
                 });
     }
diff --git a/src/main/java/org/codelibs/fess/app/web/admin/general/AdminGeneralAction.java b/src/main/java/org/codelibs/fess/app/web/admin/general/AdminGeneralAction.java
index 5ad918509008563d655b7555fbe5d1869b3e37de..64f9a402b304b388c06713a27ed736d7814abae4 100644
--- a/src/main/java/org/codelibs/fess/app/web/admin/general/AdminGeneralAction.java
+++ b/src/main/java/org/codelibs/fess/app/web/admin/general/AdminGeneralAction.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.app.web.admin.general;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -30,7 +32,6 @@ import org.codelibs.fess.app.web.base.FessAdminAction;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.mylasta.mail.TestmailPostcard;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.lastaflute.core.mail.Postbox;
 import org.lastaflute.web.Execute;
 import org.lastaflute.web.response.HtmlResponse;
@@ -91,9 +92,9 @@ public class AdminGeneralAction extends FessAdminAction {
             TestmailPostcard.droppedInto(postbox, postcard -> {
                 postcard.setFrom(fessConfig.getMailFromAddress(), fessConfig.getMailFromName());
                 postcard.addReplyTo(fessConfig.getMailReturnPath());
-                StreamUtil.of(toAddresses).forEach(address -> {
+                stream(toAddresses).of(stream -> stream.forEach(address -> {
                     postcard.addTo(address);
-                });
+                }));
                 BeanUtil.copyMapToBean(dataMap, postcard);
             });
             saveInfo(messages -> messages.addSuccessSendTestmail(GLOBAL));
diff --git a/src/main/java/org/codelibs/fess/app/web/admin/labeltype/AdminLabeltypeAction.java b/src/main/java/org/codelibs/fess/app/web/admin/labeltype/AdminLabeltypeAction.java
index 78d48723d1a05aafbdb82976b1d78fd0bf5164cc..09c6a88f4a3a6ecf6a7789a8694dc398d3120ef9 100644
--- a/src/main/java/org/codelibs/fess/app/web/admin/labeltype/AdminLabeltypeAction.java
+++ b/src/main/java/org/codelibs/fess/app/web/admin/labeltype/AdminLabeltypeAction.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.app.web.admin.labeltype;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -31,7 +33,6 @@ import org.codelibs.fess.es.config.exentity.LabelType;
 import org.codelibs.fess.helper.PermissionHelper;
 import org.codelibs.fess.util.ComponentUtil;
 import org.codelibs.fess.util.RenderDataUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.dbflute.optional.OptionalEntity;
 import org.dbflute.optional.OptionalThing;
 import org.lastaflute.web.Execute;
@@ -141,8 +142,9 @@ public class AdminLabeltypeAction extends FessAdminAction {
                             });
                             final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
                             form.permissions =
-                                    StreamUtil.of(entity.getPermissions()).map(s -> permissionHelper.decode(s))
-                                            .filter(s -> StringUtil.isNotBlank(s)).distinct().collect(Collectors.joining("\n"));
+                                    stream(entity.getPermissions()).get(
+                                            stream -> stream.map(s -> permissionHelper.decode(s)).filter(s -> StringUtil.isNotBlank(s))
+                                                    .distinct().collect(Collectors.joining("\n")));
                         }).orElse(() -> {
                     throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), () -> asListHtml());
                 });
@@ -178,9 +180,10 @@ public class AdminLabeltypeAction extends FessAdminAction {
                                             });
                                             final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
                                             form.permissions =
-                                                    StreamUtil.of(entity.getPermissions()).map(s -> permissionHelper.decode(s))
-                                                            .filter(s -> StringUtil.isNotBlank(s)).distinct()
-                                                            .collect(Collectors.joining("\n"));
+                                                    stream(entity.getPermissions()).get(
+                                                            stream -> stream.map(s -> permissionHelper.decode(s))
+                                                                    .filter(s -> StringUtil.isNotBlank(s)).distinct()
+                                                                    .collect(Collectors.joining("\n")));
                                             form.crudMode = crudMode;
                                         })
                                 .orElse(() -> {
@@ -296,8 +299,9 @@ public class AdminLabeltypeAction extends FessAdminAction {
                             op -> op.exclude(Stream.concat(Stream.of(Constants.COMMON_CONVERSION_RULE), Stream.of("permissions")).toArray(
                                     n -> new String[n])));
                     final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
-                    entity.setPermissions(StreamUtil.of(form.permissions.split("\n")).map(s -> permissionHelper.encode(s))
-                            .filter(s -> StringUtil.isNotBlank(s)).distinct().toArray(n -> new String[n]));
+                    entity.setPermissions(stream(form.permissions.split("\n")).get(
+                            stream -> stream.map(s -> permissionHelper.encode(s)).filter(s -> StringUtil.isNotBlank(s)).distinct()
+                                    .toArray(n -> new String[n])));
                     return entity;
                 });
     }
diff --git a/src/main/java/org/codelibs/fess/app/web/admin/searchlist/ListForm.java b/src/main/java/org/codelibs/fess/app/web/admin/searchlist/ListForm.java
index 5545cfeb14c102c4e1fdcc424d593e71b263246d..26fc39fe4966b16a7c3e8cb5490c3aa6d4a4dc5c 100644
--- a/src/main/java/org/codelibs/fess/app/web/admin/searchlist/ListForm.java
+++ b/src/main/java/org/codelibs/fess/app/web/admin/searchlist/ListForm.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.app.web.admin.searchlist;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.io.Serializable;
 import java.util.HashMap;
 import java.util.Locale;
@@ -28,7 +30,6 @@ import org.codelibs.fess.entity.GeoInfo;
 import org.codelibs.fess.entity.SearchRequestParams;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.lastaflute.web.util.LaRequestUtil;
 import org.lastaflute.web.validation.theme.conversion.ValidateTypeFailure;
 
@@ -67,7 +68,7 @@ public class ListForm implements SearchRequestParams, Serializable {
 
     @Override
     public String[] getExtraQueries() {
-        return StreamUtil.of(ex_q).filter(q -> StringUtil.isNotBlank(q)).distinct().toArray(n -> new String[n]);
+        return stream(ex_q).get(stream -> stream.filter(q -> StringUtil.isNotBlank(q)).distinct().toArray(n -> new String[n]));
     }
 
     @Override
@@ -97,7 +98,7 @@ public class ListForm implements SearchRequestParams, Serializable {
 
     @Override
     public String[] getLanguages() {
-        return StreamUtil.of(lang).filter(q -> StringUtil.isNotBlank(q)).distinct().toArray(n -> new String[n]);
+        return stream(lang).get(stream -> stream.filter(q -> StringUtil.isNotBlank(q)).distinct().toArray(n -> new String[n]));
     }
 
     @Override
diff --git a/src/main/java/org/codelibs/fess/app/web/admin/webconfig/AdminWebconfigAction.java b/src/main/java/org/codelibs/fess/app/web/admin/webconfig/AdminWebconfigAction.java
index eb97ec9a9820ba687df8eb6fe2260e16323d9d4f..0943fcee5a1b52696d0ed6b242595b379555f437 100644
--- a/src/main/java/org/codelibs/fess/app/web/admin/webconfig/AdminWebconfigAction.java
+++ b/src/main/java/org/codelibs/fess/app/web/admin/webconfig/AdminWebconfigAction.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.app.web.admin.webconfig;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -33,7 +35,6 @@ import org.codelibs.fess.es.config.exentity.WebConfig;
 import org.codelibs.fess.helper.PermissionHelper;
 import org.codelibs.fess.util.ComponentUtil;
 import org.codelibs.fess.util.RenderDataUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.dbflute.optional.OptionalEntity;
 import org.dbflute.optional.OptionalThing;
 import org.lastaflute.web.Execute;
@@ -145,8 +146,9 @@ public class AdminWebconfigAction extends FessAdminAction {
                             });
                             final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
                             form.permissions =
-                                    StreamUtil.of(entity.getPermissions()).map(s -> permissionHelper.decode(s))
-                                            .filter(s -> StringUtil.isNotBlank(s)).distinct().collect(Collectors.joining("\n"));
+                                    stream(entity.getPermissions()).get(
+                                            stream -> stream.map(s -> permissionHelper.decode(s)).filter(s -> StringUtil.isNotBlank(s))
+                                                    .distinct().collect(Collectors.joining("\n")));
                         }).orElse(() -> {
                     throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), () -> asListHtml());
                 });
@@ -182,9 +184,10 @@ public class AdminWebconfigAction extends FessAdminAction {
                                             });
                                             final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
                                             form.permissions =
-                                                    StreamUtil.of(entity.getPermissions()).map(s -> permissionHelper.decode(s))
-                                                            .filter(s -> StringUtil.isNotBlank(s)).distinct()
-                                                            .collect(Collectors.joining("\n"));
+                                                    stream(entity.getPermissions()).get(
+                                                            stream -> stream.map(s -> permissionHelper.decode(s))
+                                                                    .filter(s -> StringUtil.isNotBlank(s)).distinct()
+                                                                    .collect(Collectors.joining("\n")));
                                             form.crudMode = crudMode;
                                         })
                                 .orElse(() -> {
@@ -297,8 +300,9 @@ public class AdminWebconfigAction extends FessAdminAction {
                             op -> op.exclude(Stream.concat(Stream.of(Constants.COMMON_CONVERSION_RULE), Stream.of("permissions")).toArray(
                                     n -> new String[n])));
                     final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
-                    entity.setPermissions(StreamUtil.of(form.permissions.split("\n")).map(s -> permissionHelper.encode(s))
-                            .filter(s -> StringUtil.isNotBlank(s)).distinct().toArray(n -> new String[n]));
+                    entity.setPermissions(stream(form.permissions.split("\n")).get(
+                            stream -> stream.map(s -> permissionHelper.encode(s)).filter(s -> StringUtil.isNotBlank(s)).distinct()
+                                    .toArray(n -> new String[n])));
                     return entity;
                 });
     }
diff --git a/src/main/java/org/codelibs/fess/app/web/base/SearchForm.java b/src/main/java/org/codelibs/fess/app/web/base/SearchForm.java
index e0a6805b8851a1b5ab4f6779d01a44bdda25c609..3ebf46797b5ebb15dfd46ffdf5726aa899e5e893 100644
--- a/src/main/java/org/codelibs/fess/app/web/base/SearchForm.java
+++ b/src/main/java/org/codelibs/fess/app/web/base/SearchForm.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.app.web.base;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.io.Serializable;
 import java.util.HashMap;
 import java.util.Locale;
@@ -28,7 +30,6 @@ import org.codelibs.fess.entity.GeoInfo;
 import org.codelibs.fess.entity.SearchRequestParams;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.lastaflute.web.util.LaRequestUtil;
 import org.lastaflute.web.validation.theme.conversion.ValidateTypeFailure;
 
@@ -92,7 +93,7 @@ public class SearchForm implements SearchRequestParams, Serializable {
 
     @Override
     public String[] getExtraQueries() {
-        return StreamUtil.of(ex_q).filter(q -> StringUtil.isNotBlank(q)).distinct().toArray(n -> new String[n]);
+        return stream(ex_q).get(stream -> stream.filter(q -> StringUtil.isNotBlank(q)).distinct().toArray(n -> new String[n]));
     }
 
     @Override
@@ -102,7 +103,7 @@ public class SearchForm implements SearchRequestParams, Serializable {
 
     @Override
     public String[] getLanguages() {
-        return StreamUtil.of(lang).filter(q -> StringUtil.isNotBlank(q)).distinct().toArray(n -> new String[n]);
+        return stream(lang).get(stream -> stream.filter(q -> StringUtil.isNotBlank(q)).distinct().toArray(n -> new String[n]));
     }
 
     @Override
diff --git a/src/main/java/org/codelibs/fess/app/web/search/SearchAction.java b/src/main/java/org/codelibs/fess/app/web/search/SearchAction.java
index 3333f7c4c746bfeb474e24c8e07493f04fbaec4e..c4679dc36b774f7f7b0837e0c2ef8d7cec92bc5b 100644
--- a/src/main/java/org/codelibs/fess/app/web/search/SearchAction.java
+++ b/src/main/java/org/codelibs/fess/app/web/search/SearchAction.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.app.web.search;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -33,7 +35,6 @@ import org.codelibs.fess.entity.SearchRenderData;
 import org.codelibs.fess.exception.InvalidQueryException;
 import org.codelibs.fess.exception.ResultOffsetExceededException;
 import org.codelibs.fess.util.RenderDataUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.lastaflute.taglib.function.LaFunctions;
 import org.lastaflute.web.Execute;
 import org.lastaflute.web.response.HtmlResponse;
@@ -199,8 +200,9 @@ public class SearchAction extends FessSearchAction {
     protected void createPagingQuery(final SearchForm form) {
         final List<String> pagingQueryList = new ArrayList<>();
         if (form.ex_q != null) {
-            StreamUtil.of(form.ex_q).filter(q -> StringUtil.isNotBlank(q)).distinct()
-                    .forEach(q -> pagingQueryList.add("ex_q=" + LaFunctions.u(q)));
+            stream(form.ex_q).of(
+                    stream -> stream.filter(q -> StringUtil.isNotBlank(q)).distinct()
+                            .forEach(q -> pagingQueryList.add("ex_q=" + LaFunctions.u(q))));
         }
         if (StringUtil.isNotBlank(form.sort)) {
             pagingQueryList.add("sort=" + LaFunctions.u(form.sort));
diff --git a/src/main/java/org/codelibs/fess/crawler/FessCrawlerThread.java b/src/main/java/org/codelibs/fess/crawler/FessCrawlerThread.java
index 9117cfdf880ffd6b406327d054fc5633daf07dd3..31f9158bd0eb910a9d054c692039e53119af25b6 100644
--- a/src/main/java/org/codelibs/fess/crawler/FessCrawlerThread.java
+++ b/src/main/java/org/codelibs/fess/crawler/FessCrawlerThread.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.crawler;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
@@ -44,7 +46,6 @@ import org.codelibs.fess.helper.SambaHelper;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
 import org.codelibs.fess.util.DocumentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -74,7 +75,7 @@ public class FessCrawlerThread extends CrawlerThread {
                 final Map<String, Object> dataMap = new HashMap<>();
                 dataMap.put(fessConfig.getIndexFieldUrl(), url);
                 final List<String> roleTypeList = new ArrayList<>();
-                StreamUtil.of(crawlingConfig.getPermissions()).forEach(p -> roleTypeList.add(p));
+                stream(crawlingConfig.getPermissions()).of(stream -> stream.forEach(p -> roleTypeList.add(p)));
                 if (url.startsWith("smb://")) {
                     if (url.endsWith("/")) {
                         // directory
diff --git a/src/main/java/org/codelibs/fess/crawler/transformer/AbstractFessFileTransformer.java b/src/main/java/org/codelibs/fess/crawler/transformer/AbstractFessFileTransformer.java
index 5cf3649cfccadc5a6af0981d1ac6d31af3be288e..14f2e27f1d33608368866d14bebacdd825095c2b 100644
--- a/src/main/java/org/codelibs/fess/crawler/transformer/AbstractFessFileTransformer.java
+++ b/src/main/java/org/codelibs/fess/crawler/transformer/AbstractFessFileTransformer.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.crawler.transformer;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.io.InputStream;
 import java.net.URLDecoder;
 import java.util.ArrayList;
@@ -59,7 +61,6 @@ import org.codelibs.fess.helper.SambaHelper;
 import org.codelibs.fess.helper.SystemHelper;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -295,7 +296,7 @@ public abstract class AbstractFessFileTransformer extends AbstractTransformer im
         putResultDataBody(dataMap, fessConfig.getIndexFieldLabel(), labelTypeSet);
         // role: roleType
         final List<String> roleTypeList = getRoleTypes(responseData);
-        StreamUtil.of(crawlingConfig.getPermissions()).forEach(p -> roleTypeList.add(p));
+        stream(crawlingConfig.getPermissions()).of(stream -> stream.forEach(p -> roleTypeList.add(p)));
         putResultDataBody(dataMap, fessConfig.getIndexFieldRole(), roleTypeList);
         // TODO date
         // lang
diff --git a/src/main/java/org/codelibs/fess/crawler/transformer/FessXpathTransformer.java b/src/main/java/org/codelibs/fess/crawler/transformer/FessXpathTransformer.java
index 9d2aeaaa00b96fe06f95479eae1064a4d4faccf6..3ce3d6a967a3ff97caab0c51bdafc2cf65c6e290 100644
--- a/src/main/java/org/codelibs/fess/crawler/transformer/FessXpathTransformer.java
+++ b/src/main/java/org/codelibs/fess/crawler/transformer/FessXpathTransformer.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.crawler.transformer;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.io.BufferedInputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
@@ -59,7 +61,6 @@ import org.codelibs.fess.helper.PathMappingHelper;
 import org.codelibs.fess.helper.SystemHelper;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.cyberneko.html.parsers.DOMParser;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -287,7 +288,7 @@ public class FessXpathTransformer extends XpathTransformer implements FessTransf
         putResultDataBody(dataMap, fessConfig.getIndexFieldLabel(), labelTypeSet);
         // role: roleType
         final List<String> roleTypeList = new ArrayList<>();
-        StreamUtil.of(crawlingConfig.getPermissions()).forEach(p -> roleTypeList.add(p));
+        stream(crawlingConfig.getPermissions()).of(stream -> stream.forEach(p -> roleTypeList.add(p)));
         putResultDataBody(dataMap, fessConfig.getIndexFieldRole(), roleTypeList);
         // id
         putResultDataBody(dataMap, fessConfig.getIndexFieldId(), crawlingInfoHelper.generateId(dataMap));
diff --git a/src/main/java/org/codelibs/fess/ds/impl/AbstractDataStoreImpl.java b/src/main/java/org/codelibs/fess/ds/impl/AbstractDataStoreImpl.java
index edf80754d4d4ccac1db83a5efd1e592fbab53731..97731d4282e281dd10cbd17562ab329a55246fe1 100644
--- a/src/main/java/org/codelibs/fess/ds/impl/AbstractDataStoreImpl.java
+++ b/src/main/java/org/codelibs/fess/ds/impl/AbstractDataStoreImpl.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.ds.impl;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
@@ -31,7 +33,6 @@ import org.codelibs.fess.helper.SystemHelper;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
 import org.codelibs.fess.util.GroovyUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -86,7 +87,7 @@ public abstract class AbstractDataStoreImpl implements DataStore {
         defaultDataMap.put(fessConfig.getIndexFieldLabel(), labelTypeList);
         // role: roleType
         final List<String> roleTypeList = new ArrayList<>();
-        StreamUtil.of(config.getPermissions()).forEach(p -> roleTypeList.add(p));
+        stream(config.getPermissions()).of(stream -> stream.forEach(p -> roleTypeList.add(p)));
         defaultDataMap.put(fessConfig.getIndexFieldRole(), roleTypeList);
         // mimetype
         defaultDataMap.put(fessConfig.getIndexFieldMimetype(), mimeType);
diff --git a/src/main/java/org/codelibs/fess/ds/impl/CsvDataStoreImpl.java b/src/main/java/org/codelibs/fess/ds/impl/CsvDataStoreImpl.java
index a696f6123d0683b920d06d2eec1db74db677dd21..6e724022eaea9463a8431d8b681b3d8809a095df 100644
--- a/src/main/java/org/codelibs/fess/ds/impl/CsvDataStoreImpl.java
+++ b/src/main/java/org/codelibs/fess/ds/impl/CsvDataStoreImpl.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.ds.impl;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
@@ -39,7 +41,6 @@ import org.codelibs.fess.es.config.exentity.DataConfig;
 import org.codelibs.fess.exception.DataStoreCrawlingException;
 import org.codelibs.fess.exception.DataStoreException;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -96,8 +97,9 @@ public class CsvDataStoreImpl extends AbstractDataStoreImpl {
             for (final String path : values) {
                 final File dir = new File(path);
                 if (dir.isDirectory()) {
-                    StreamUtil.of(dir.listFiles()).filter(f -> isCsvFile(f.getParentFile(), f.getName()))
-                            .sorted((f1, f2) -> (int) (f1.lastModified() - f2.lastModified())).forEach(f -> fileList.add(f));
+                    stream(dir.listFiles()).of(
+                            stream -> stream.filter(f -> isCsvFile(f.getParentFile(), f.getName()))
+                                    .sorted((f1, f2) -> (int) (f1.lastModified() - f2.lastModified())).forEach(f -> fileList.add(f)));
                 } else {
                     logger.warn(path + " is not a directory.");
                 }
diff --git a/src/main/java/org/codelibs/fess/ds/impl/EsDataStoreImpl.java b/src/main/java/org/codelibs/fess/ds/impl/EsDataStoreImpl.java
index 89cee3b3986918e090cafb64c3f25c150feeadaa..479945f1f1f1c19cfdb8b0f28ca309c763c74b73 100644
--- a/src/main/java/org/codelibs/fess/ds/impl/EsDataStoreImpl.java
+++ b/src/main/java/org/codelibs/fess/ds/impl/EsDataStoreImpl.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.ds.impl;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.net.InetAddress;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
@@ -31,7 +33,6 @@ import org.codelibs.fess.es.config.exentity.DataConfig;
 import org.codelibs.fess.exception.DataStoreCrawlingException;
 import org.codelibs.fess.exception.DataStoreException;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.elasticsearch.action.bulk.BulkRequestBuilder;
 import org.elasticsearch.action.bulk.BulkResponse;
 import org.elasticsearch.action.search.SearchRequestBuilder;
@@ -89,7 +90,7 @@ public class EsDataStoreImpl extends AbstractDataStoreImpl {
                                         Collectors.toMap(e -> e.getKey().replaceFirst("^settings\\.", StringUtil.EMPTY), e -> e.getValue())))
                         .build();
         logger.info("Connecting to " + hostsStr + " with [" + settings.toDelimitedString(',') + "]");
-        final InetSocketTransportAddress[] addresses = StreamUtil.of(hostsStr.split(",")).map(h -> {
+        final InetSocketTransportAddress[] addresses = stream(hostsStr.split(",")).get(stream -> stream.map(h -> {
             final String[] values = h.trim().split(":");
             try {
                 if (values.length == 1) {
@@ -101,7 +102,7 @@ public class EsDataStoreImpl extends AbstractDataStoreImpl {
                 logger.warn("Failed to parse address: " + h, e);
             }
             return null;
-        }).filter(v -> v != null).toArray(n -> new InetSocketTransportAddress[n]);
+        }).filter(v -> v != null).toArray(n -> new InetSocketTransportAddress[n]));
         try (Client client = TransportClient.builder().settings(settings).build().addTransportAddresses(addresses)) {
             processData(dataConfig, callback, paramMap, scriptMap, defaultDataMap, readInterval, client);
         }
diff --git a/src/main/java/org/codelibs/fess/ds/impl/FileListIndexUpdateCallbackImpl.java b/src/main/java/org/codelibs/fess/ds/impl/FileListIndexUpdateCallbackImpl.java
index e3e3012ab5b391662777b12ab5da311d25f25bbc..f23b023b6e5081f5ce78356e2ea2f278e1748eb9 100644
--- a/src/main/java/org/codelibs/fess/ds/impl/FileListIndexUpdateCallbackImpl.java
+++ b/src/main/java/org/codelibs/fess/ds/impl/FileListIndexUpdateCallbackImpl.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.ds.impl;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -42,7 +44,6 @@ import org.codelibs.fess.exception.DataStoreCrawlingException;
 import org.codelibs.fess.helper.IndexingHelper;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.lastaflute.di.core.SingletonLaContainer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -149,7 +150,7 @@ public class FileListIndexUpdateCallbackImpl implements IndexUpdateCallback, Aut
                         } else {
                             ignoreFields = new String[] { Constants.INDEXING_TARGET, Constants.SESSION_ID };
                         }
-                        StreamUtil.of(ignoreFields).map(s -> s.trim()).forEach(s -> dataMap.remove(s));
+                        stream(ignoreFields).of(stream -> stream.map(s -> s.trim()).forEach(s -> dataMap.remove(s)));
 
                         indexUpdateCallback.store(paramMap, dataMap);
                     } else {
diff --git a/src/main/java/org/codelibs/fess/entity/GeoInfo.java b/src/main/java/org/codelibs/fess/entity/GeoInfo.java
index dc88fe4b8f778d5dd1b24b02b05bc0af3daa3b84..763973e76f81bd6e565f38ba5bf77aca1a6724ab 100644
--- a/src/main/java/org/codelibs/fess/entity/GeoInfo.java
+++ b/src/main/java/org/codelibs/fess/entity/GeoInfo.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.entity;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -26,7 +28,6 @@ import org.codelibs.core.lang.StringUtil;
 import org.codelibs.fess.exception.InvalidQueryException;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.elasticsearch.index.query.BoolQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
@@ -42,10 +43,8 @@ public class GeoInfo {
         final String[] geoFields = fessConfig.getQueryGeoFieldsAsArray();
         final Map<String, List<QueryBuilder>> geoMap = new HashMap<>();
 
-        StreamUtil
-                .of(request.getParameterMap())
-                .filter(e -> e.getKey().startsWith("geo.") && e.getKey().endsWith(".point"))
-                .forEach(
+        stream(request.getParameterMap()).of(
+                stream -> stream.filter(e -> e.getKey().startsWith("geo.") && e.getKey().endsWith(".point")).forEach(
                         e -> {
                             final String key = e.getKey();
                             for (final String geoField : geoFields) {
@@ -53,8 +52,8 @@ public class GeoInfo {
                                     final String distanceKey = key.replaceFirst(".point$", ".distance");
                                     final String distance = request.getParameter(distanceKey);
                                     if (StringUtil.isNotBlank(distance)) {
-                                        StreamUtil.of(e.getValue()).forEach(
-                                                pt -> {
+                                        stream(e.getValue()).of(
+                                                s -> s.forEach(pt -> {
                                                     List<QueryBuilder> list = geoMap.get(geoField);
                                                     if (list == null) {
                                                         list = new ArrayList<>();
@@ -77,12 +76,12 @@ public class GeoInfo {
                                                                 .addErrorsInvalidQueryUnknown(UserMessages.GLOBAL_PROPERTY_KEY),
                                                                 "Invalid geo point: " + pt);
                                                     }
-                                                });
+                                                }));
                                     }
                                     break;
                                 }
                             }
-                        });
+                        }));
 
         final QueryBuilder[] queryBuilders = geoMap.values().stream().map(list -> {
             if (list.size() == 1) {
@@ -99,7 +98,7 @@ public class GeoInfo {
             builder = queryBuilders[0];
         } else if (queryBuilders.length > 1) {
             final BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
-            StreamUtil.of(queryBuilders).forEach(q -> boolQuery.must(q));
+            stream(queryBuilders).of(stream -> stream.forEach(q -> boolQuery.must(q)));
             builder = boolQuery;
         }
 
diff --git a/src/main/java/org/codelibs/fess/entity/QueryContext.java b/src/main/java/org/codelibs/fess/entity/QueryContext.java
index b028a931b76faaff06c48cdcc0dd6f6ee81cc4fe..fcbf31227c1ba0b5b26e36dfe8274dd0bf7daff9 100644
--- a/src/main/java/org/codelibs/fess/entity/QueryContext.java
+++ b/src/main/java/org/codelibs/fess/entity/QueryContext.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.entity;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -25,7 +27,6 @@ import java.util.Set;
 import java.util.function.Consumer;
 
 import org.codelibs.fess.Constants;
-import org.codelibs.fess.util.StreamUtil;
 import org.elasticsearch.index.query.BoolQueryBuilder;
 import org.elasticsearch.index.query.MatchAllQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilder;
@@ -87,7 +88,7 @@ public class QueryContext {
     }
 
     public void addSorts(final SortBuilder... sortBuilders) {
-        StreamUtil.of(sortBuilders).forEach(sortBuilder -> sortBuilderList.add(sortBuilder));
+        stream(sortBuilders).of(stream -> stream.forEach(sortBuilder -> sortBuilderList.add(sortBuilder)));
     }
 
     public boolean hasSorts() {
diff --git a/src/main/java/org/codelibs/fess/entity/SearchRequestParams.java b/src/main/java/org/codelibs/fess/entity/SearchRequestParams.java
index 6b8efd0f90185970a216e9a2bb31fcea515fd89e..1fb791404074920b9adff0ae40bc277228a98e4a 100644
--- a/src/main/java/org/codelibs/fess/entity/SearchRequestParams.java
+++ b/src/main/java/org/codelibs/fess/entity/SearchRequestParams.java
@@ -15,13 +15,14 @@
  */
 package org.codelibs.fess.entity;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.util.Locale;
 import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
 
 import org.codelibs.core.lang.StringUtil;
-import org.codelibs.fess.util.StreamUtil;
 
 public interface SearchRequestParams {
 
@@ -50,7 +51,7 @@ public interface SearchRequestParams {
     Locale getLocale();
 
     public default String[] simplifyArray(final String[] values) {
-        return StreamUtil.of(values).filter(q -> StringUtil.isNotBlank(q)).distinct().toArray(n -> new String[n]);
+        return stream(values).get(stream -> stream.filter(q -> StringUtil.isNotBlank(q)).distinct().toArray(n -> new String[n]));
     }
 
     public default String[] getParamValueArray(final HttpServletRequest request, final String param) {
diff --git a/src/main/java/org/codelibs/fess/es/client/FessEsClient.java b/src/main/java/org/codelibs/fess/es/client/FessEsClient.java
index 19f45b2b943bad672cd0b5239501c530e6e6fefb..347461940d98966b6844b1c10a00cb1950697edf 100644
--- a/src/main/java/org/codelibs/fess/es/client/FessEsClient.java
+++ b/src/main/java/org/codelibs/fess/es/client/FessEsClient.java
@@ -15,6 +15,7 @@
  */
 package org.codelibs.fess.es.client;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
 import static org.codelibs.elasticsearch.runner.ElasticsearchClusterRunner.newConfigs;
 
 import java.io.File;
@@ -56,7 +57,6 @@ import org.codelibs.fess.exception.SearchQueryException;
 import org.codelibs.fess.helper.QueryHelper;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.dbflute.exception.IllegalBehaviorStateException;
 import org.dbflute.optional.OptionalEntity;
 import org.elasticsearch.ElasticsearchException;
@@ -371,8 +371,8 @@ public class FessEsClient implements Client {
                 try {
                     final File aliasConfigDir = ResourceUtil.getResourceAsFile(aliasConfigDirPath);
                     if (aliasConfigDir.isDirectory()) {
-                        StreamUtil.of(aliasConfigDir.listFiles((dir, name) -> name.endsWith(".json"))).forEach(
-                                f -> {
+                        stream(aliasConfigDir.listFiles((dir, name) -> name.endsWith(".json"))).of(
+                                stream -> stream.forEach(f -> {
                                     final String aliasName = f.getName().replaceFirst(".json$", "");
                                     final String source = FileUtil.readUTF8(f);
                                     final IndicesAliasesResponse response =
@@ -383,7 +383,7 @@ public class FessEsClient implements Client {
                                     } else if (logger.isDebugEnabled()) {
                                         logger.debug("Failed to create " + aliasName + " alias for " + configIndex);
                                     }
-                                });
+                                }));
                     }
                 } catch (final ResourceNotFoundRuntimeException e) {
                     // ignore
@@ -882,12 +882,12 @@ public class FessEsClient implements Client {
             queryContext.sortBuilders().forEach(sortBuilder -> searchRequestBuilder.addSort(sortBuilder));
 
             // highlighting
-            queryHelper.highlightedFields().forEach(
-                    hf -> searchRequestBuilder.addHighlightedField(hf, queryHelper.getHighlightFragmentSize()));
+            queryHelper.highlightedFields(stream -> stream.forEach(hf -> searchRequestBuilder.addHighlightedField(hf,
+                    queryHelper.getHighlightFragmentSize())));
 
             // facets
             if (facetInfo != null) {
-                StreamUtil.of(facetInfo.field).forEach(f -> {
+                stream(facetInfo.field).of(stream -> stream.forEach(f -> {
                     if (queryHelper.isFacetField(f)) {
                         final String encodedField = BaseEncoding.base64().encode(f.getBytes(StandardCharsets.UTF_8));
                         final TermsBuilder termsBuilder = AggregationBuilders.terms(Constants.FACET_FIELD_PREFIX + encodedField).field(f);
@@ -909,9 +909,9 @@ public class FessEsClient implements Client {
                     } else {
                         throw new SearchQueryException("Invalid facet field: " + f);
                     }
-                });
-                StreamUtil.of(facetInfo.query).forEach(
-                        fq -> {
+                }));
+                stream(facetInfo.query).of(
+                        stream -> stream.forEach(fq -> {
                             final QueryContext facetContext = new QueryContext(fq, false);
                             queryHelper.buildBaseQuery(facetContext, c -> {});
                             final String encodedFacetQuery = BaseEncoding.base64().encode(fq.getBytes(StandardCharsets.UTF_8));
@@ -919,7 +919,7 @@ public class FessEsClient implements Client {
                                     AggregationBuilders.filter(Constants.FACET_QUERY_PREFIX + encodedFacetQuery).filter(
                                             facetContext.getQueryBuilder());
                             searchRequestBuilder.addAggregation(filterBuilder);
-                        });
+                        }));
             }
 
             searchRequestBuilder.setQuery(queryContext.getQueryBuilder());
diff --git a/src/main/java/org/codelibs/fess/es/user/exentity/User.java b/src/main/java/org/codelibs/fess/es/user/exentity/User.java
index 94fb41d1904d1bc878486a1d7467b5190e9d5d60..87f24fd2b2caee195ec1ae6a601297951b0f645b 100644
--- a/src/main/java/org/codelibs/fess/es/user/exentity/User.java
+++ b/src/main/java/org/codelibs/fess/es/user/exentity/User.java
@@ -15,16 +15,18 @@
  */
 package org.codelibs.fess.es.user.exentity;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Base64;
-import java.util.stream.Stream;
+import java.util.List;
 
 import org.codelibs.fess.Constants;
 import org.codelibs.fess.entity.FessUser;
 import org.codelibs.fess.es.user.bsentity.BsUser;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 
 /**
  * @author FreeGen
@@ -53,20 +55,16 @@ public class User extends BsUser implements FessUser {
 
     @Override
     public String[] getRoleNames() {
-        return getRoleStream().toArray(n -> new String[n]);
-    }
-
-    protected Stream<String> getRoleStream() {
-        return StreamUtil.of(getRoles()).map(role -> new String(Base64.getDecoder().decode(role), Constants.CHARSET_UTF_8));
+        return stream(getRoles()).get(stream -> stream.map(s -> decode(s)).toArray(n -> new String[n]));
     }
 
     @Override
     public String[] getGroupNames() {
-        return getGroupStream().toArray(n -> new String[n]);
+        return stream(getGroups()).get(stream -> stream.map(s -> decode(s)).toArray(n -> new String[n]));
     }
 
-    private Stream<String> getGroupStream() {
-        return StreamUtil.of(getGroups()).map(group -> new String(Base64.getDecoder().decode(group), Constants.CHARSET_UTF_8));
+    private String decode(String value) {
+        return new String(Base64.getDecoder().decode(value), Constants.CHARSET_UTF_8);
     }
 
     @Override
@@ -86,10 +84,11 @@ public class User extends BsUser implements FessUser {
     @Override
     public String[] getPermissions() {
         final FessConfig fessConfig = ComponentUtil.getFessConfig();
-        return Stream.concat(
-                Stream.of(fessConfig.getRoleSearchUserPrefix() + getName()),
-                Stream.concat(getRoleStream().map(s -> fessConfig.getRoleSearchRolePrefix() + s),
-                        getGroupStream().map(s -> fessConfig.getRoleSearchGroupPrefix() + s))).toArray(n -> new String[n]);
+        final List<String> list = new ArrayList<>();
+        list.add(fessConfig.getRoleSearchUserPrefix() + getName());
+        stream(getRoles()).of(stream -> stream.forEach(s -> list.add(fessConfig.getRoleSearchRolePrefix() + decode(s))));
+        stream(getGroups()).of(stream -> stream.forEach(s -> list.add(fessConfig.getRoleSearchGroupPrefix() + decode(s))));
+        return list.toArray(new String[list.size()]);
     }
 
 }
diff --git a/src/main/java/org/codelibs/fess/exec/Crawler.java b/src/main/java/org/codelibs/fess/exec/Crawler.java
index b020218584e6333c93bdf973f9c891cad9266898..dba1f877b6853f2827b217d4d8ef33593135d5db 100644
--- a/src/main/java/org/codelibs/fess/exec/Crawler.java
+++ b/src/main/java/org/codelibs/fess/exec/Crawler.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.exec;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.io.File;
 import java.io.IOException;
 import java.io.Serializable;
@@ -45,7 +47,6 @@ import org.codelibs.fess.helper.WebFsIndexHelper;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.mylasta.mail.CrawlerPostcard;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.kohsuke.args4j.CmdLineException;
 import org.kohsuke.args4j.CmdLineParser;
 import org.kohsuke.args4j.Option;
@@ -318,9 +319,9 @@ public class Crawler implements Serializable {
             CrawlerPostcard.droppedInto(postbox, postcard -> {
                 postcard.setFrom(fessConfig.getMailFromAddress(), fessConfig.getMailFromName());
                 postcard.addReplyTo(fessConfig.getMailReturnPath());
-                StreamUtil.of(toAddresses).forEach(address -> {
+                stream(toAddresses).of(stream -> stream.forEach(address -> {
                     postcard.addTo(address);
-                });
+                }));
                 postcard.setCrawlerEndTime(getValueFromMap(dataMap, "crawlerEndTime", StringUtil.EMPTY));
                 postcard.setCrawlerExecTime(getValueFromMap(dataMap, "crawlerExecTime", "0"));
                 postcard.setCrawlerStartTime(getValueFromMap(dataMap, "crawlerStartTime", StringUtil.EMPTY));
diff --git a/src/main/java/org/codelibs/fess/helper/PopularWordHelper.java b/src/main/java/org/codelibs/fess/helper/PopularWordHelper.java
index 49dbd9d5930edf9c5f5ce7a2da1798b9e4ca004b..c41f1221758dbd25a3f47362da7eeb371adfbeb2 100644
--- a/src/main/java/org/codelibs/fess/helper/PopularWordHelper.java
+++ b/src/main/java/org/codelibs/fess/helper/PopularWordHelper.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.helper;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -27,7 +29,6 @@ import org.codelibs.core.lang.StringUtil;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.suggest.request.popularwords.PopularWordsRequestBuilder;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -71,10 +72,10 @@ public class PopularWordHelper {
                                         .setSize(fessConfig.getSuggestPopularWordSizeAsInteger().intValue())
                                         .setWindowSize(fessConfig.getSuggestPopularWordWindowSizeAsInteger().intValue());
                         popularWordsRequestBuilder.setSeed(baseSeed);
-                        StreamUtil.of(baseTags).forEach(tag -> popularWordsRequestBuilder.addTag(tag));
-                        StreamUtil.of(baseRoles).forEach(role -> popularWordsRequestBuilder.addRole(role));
-                        StreamUtil.of(baseFields).forEach(field -> popularWordsRequestBuilder.addField(field));
-                        StreamUtil.of(baseExcludes).forEach(exclude -> popularWordsRequestBuilder.addExcludeWord(exclude));
+                        stream(baseTags).of(stream -> stream.forEach(tag -> popularWordsRequestBuilder.addTag(tag)));
+                        stream(baseRoles).of(stream -> stream.forEach(role -> popularWordsRequestBuilder.addRole(role)));
+                        stream(baseFields).of(stream -> stream.forEach(field -> popularWordsRequestBuilder.addField(field)));
+                        stream(baseExcludes).of(stream -> stream.forEach(exclude -> popularWordsRequestBuilder.addExcludeWord(exclude)));
                         popularWordsRequestBuilder.execute().then(r -> {
                             r.getItems().stream().forEach(item -> wordList.add(item.getText()));
                         }).error(t -> logger.warn("Failed to generate popular words.", t));
@@ -91,13 +92,13 @@ public class PopularWordHelper {
             final String[] excludes) {
         final StringBuilder buf = new StringBuilder(100);
         buf.append(seed).append(CACHE_KEY_SPLITTER);
-        StreamUtil.of(tags).sorted().reduce((l, r) -> l + r).ifPresent(v -> buf.append(v));
+        stream(tags).of(stream -> stream.sorted().reduce((l, r) -> l + r).ifPresent(v -> buf.append(v)));
         buf.append(CACHE_KEY_SPLITTER);
-        StreamUtil.of(roles).sorted().reduce((l, r) -> l + r).ifPresent(v -> buf.append(v));
+        stream(roles).of(stream -> stream.sorted().reduce((l, r) -> l + r).ifPresent(v -> buf.append(v)));
         buf.append(CACHE_KEY_SPLITTER);
-        StreamUtil.of(fields).sorted().reduce((l, r) -> l + r).ifPresent(v -> buf.append(v));
+        stream(fields).of(stream -> stream.sorted().reduce((l, r) -> l + r).ifPresent(v -> buf.append(v)));
         buf.append(CACHE_KEY_SPLITTER);
-        StreamUtil.of(excludes).sorted().reduce((l, r) -> l + r).ifPresent(v -> buf.append(v));
+        stream(excludes).of(stream -> stream.sorted().reduce((l, r) -> l + r).ifPresent(v -> buf.append(v)));
         return buf.toString();
     }
 
diff --git a/src/main/java/org/codelibs/fess/helper/QueryHelper.java b/src/main/java/org/codelibs/fess/helper/QueryHelper.java
index 4ccf2e18ff29d349fd0135befad5af8805d8becc..4358a82de55f138dc5856784f1eb4bde02ac327e 100644
--- a/src/main/java/org/codelibs/fess/helper/QueryHelper.java
+++ b/src/main/java/org/codelibs/fess/helper/QueryHelper.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.helper;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -55,7 +57,6 @@ import org.codelibs.fess.entity.QueryContext;
 import org.codelibs.fess.exception.InvalidQueryException;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.dbflute.optional.OptionalThing;
 import org.elasticsearch.common.unit.Fuzziness;
 import org.elasticsearch.index.query.BoolQueryBuilder;
@@ -448,10 +449,10 @@ public class QueryHelper implements Serializable {
                     "Unknown phrase query: " + query);
         }
         final String field = terms[0].field();
-        final String[] texts = StreamUtil.of(terms).map(term -> term.text()).toArray(n -> new String[n]);
+        final String[] texts = stream(terms).get(stream -> stream.map(term -> term.text()).toArray(n -> new String[n]));
         final String text = String.join(" ", texts);
         context.addFieldLog(field, text);
-        StreamUtil.of(texts).forEach(t -> context.addHighlightedQuery(t));
+        stream(texts).of(stream -> stream.forEach(t -> context.addHighlightedQuery(t)));
         return buildDefaultQueryBuilder((f, b) -> QueryBuilders.matchPhraseQuery(f, text).boost(b * boost));
     }
 
@@ -474,8 +475,8 @@ public class QueryHelper implements Serializable {
         boolQuery.should(contentQuery);
         getQueryLanguages().ifPresent(
                 langs -> {
-                    StreamUtil.of(langs).forEach(
-                            lang -> {
+                    stream(langs).of(
+                            stream -> stream.forEach(lang -> {
                                 final QueryBuilder titleLangQuery =
                                         builder.apply(fessConfig.getIndexFieldTitle() + "_" + lang, fessConfig
                                                 .getQueryBoostTitleLangAsDecimal().floatValue());
@@ -484,7 +485,7 @@ public class QueryHelper implements Serializable {
                                         builder.apply(fessConfig.getIndexFieldContent() + "_" + lang, fessConfig
                                                 .getQueryBoostContentLangAsDecimal().floatValue());
                                 boolQuery.should(contentLangQuery);
-                            });
+                            }));
                 });
         return boolQuery;
     }
@@ -580,8 +581,9 @@ public class QueryHelper implements Serializable {
         this.highlightedFields = highlightedFields;
     }
 
-    public Stream<String> highlightedFields() {
-        return StreamUtil.of(highlightedFields);
+    public void highlightedFields(Consumer<Stream<String>> stream) {
+        stream(highlightedFields).of(stream);
+        ;
     }
 
     /**
@@ -711,7 +713,7 @@ public class QueryHelper implements Serializable {
     public void addDefaultSort(final String fieldName, final String order) {
         final List<SortBuilder> list = new ArrayList<>();
         if (defaultSortBuilders != null) {
-            StreamUtil.of(defaultSortBuilders).forEach(builder -> list.add(builder));
+            stream(defaultSortBuilders).of(stream -> stream.forEach(builder -> list.add(builder)));
         }
         list.add(SortBuilders.fieldSort(fieldName)
                 .order(SortOrder.DESC.toString().equalsIgnoreCase(order) ? SortOrder.DESC : SortOrder.ASC));
diff --git a/src/main/java/org/codelibs/fess/helper/RoleQueryHelper.java b/src/main/java/org/codelibs/fess/helper/RoleQueryHelper.java
index 0134479bb2fe543c302aa419e10ca5cb38d7be66..7c4aecb9691db97a4ed64ed3d087a5906e5e8ef7 100644
--- a/src/main/java/org/codelibs/fess/helper/RoleQueryHelper.java
+++ b/src/main/java/org/codelibs/fess/helper/RoleQueryHelper.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.helper;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -33,7 +35,6 @@ import org.codelibs.fess.Constants;
 import org.codelibs.fess.mylasta.action.FessUserBean;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.lastaflute.web.servlet.request.RequestManager;
 import org.lastaflute.web.util.LaRequestUtil;
 import org.slf4j.Logger;
@@ -75,9 +76,9 @@ public class RoleQueryHelper {
 
     @PostConstruct
     public void init() {
-        StreamUtil.of(ComponentUtil.getFessConfig().getSearchDefaultPermissionsAsArray()).forEach(name -> {
+        stream(ComponentUtil.getFessConfig().getSearchDefaultPermissionsAsArray()).of(stream -> stream.forEach(name -> {
             defaultRoleList.add(name);
-        });
+        }));
     }
 
     public Set<String> build() {
@@ -107,7 +108,7 @@ public class RoleQueryHelper {
         final FessConfig fessConfig = ComponentUtil.getFessConfig();
         final RequestManager requestManager = ComponentUtil.getRequestManager();
         requestManager.findUserBean(FessUserBean.class)
-                .ifPresent(fessUserBean -> StreamUtil.of(fessUserBean.getPermissions()).forEach(roleList::add))
+                .ifPresent(fessUserBean -> stream(fessUserBean.getPermissions()).of(stream -> stream.forEach(roleList::add)))
                 .orElse(() -> roleList.add(fessConfig.getRoleSearchUserPrefix() + Constants.GUEST_USER));
 
         if (defaultRoleList != null) {
diff --git a/src/main/java/org/codelibs/fess/helper/SearchLogHelper.java b/src/main/java/org/codelibs/fess/helper/SearchLogHelper.java
index e041b14fab619d6eff92a01c519c0db1a7d34d3f..14d1b6b0028525ac3f30864bf980ca00fcadd5ad 100644
--- a/src/main/java/org/codelibs/fess/helper/SearchLogHelper.java
+++ b/src/main/java/org/codelibs/fess/helper/SearchLogHelper.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.helper;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -47,7 +49,6 @@ import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
 import org.codelibs.fess.util.DocumentUtil;
 import org.codelibs.fess.util.QueryResponseList;
-import org.codelibs.fess.util.StreamUtil;
 import org.dbflute.optional.OptionalThing;
 import org.elasticsearch.action.update.UpdateRequest;
 import org.elasticsearch.script.Script;
@@ -199,21 +200,24 @@ public class SearchLogHelper {
 
         final List<SearchLog> searchLogList = new ArrayList<>();
         final Map<String, UserInfo> userInfoMap = new HashMap<>();
-        queue.stream().forEach(searchLog -> {
-            final String userAgent = searchLog.getUserAgent();
-            final boolean isBot = userAgent != null && StreamUtil.of(botNames).anyMatch(botName -> userAgent.indexOf(botName) >= 0);
-            if (!isBot) {
-                searchLog.getUserInfo().ifPresent(userInfo -> {
-                    final String code = userInfo.getId();
-                    final UserInfo oldUserInfo = userInfoMap.get(code);
-                    if (oldUserInfo != null) {
-                        userInfo.setCreatedAt(oldUserInfo.getCreatedAt());
+        queue.stream().forEach(
+                searchLog -> {
+                    final String userAgent = searchLog.getUserAgent();
+                    final boolean isBot =
+                            userAgent != null
+                                    && stream(botNames).get(stream -> stream.anyMatch(botName -> userAgent.indexOf(botName) >= 0));
+                    if (!isBot) {
+                        searchLog.getUserInfo().ifPresent(userInfo -> {
+                            final String code = userInfo.getId();
+                            final UserInfo oldUserInfo = userInfoMap.get(code);
+                            if (oldUserInfo != null) {
+                                userInfo.setCreatedAt(oldUserInfo.getCreatedAt());
+                            }
+                            userInfoMap.put(code, userInfo);
+                        });
+                        searchLogList.add(searchLog);
                     }
-                    userInfoMap.put(code, userInfo);
                 });
-                searchLogList.add(searchLog);
-            }
-        });
 
         if (!userInfoMap.isEmpty()) {
             final List<UserInfo> insertList = new ArrayList<>(userInfoMap.values());
diff --git a/src/main/java/org/codelibs/fess/helper/SuggestHelper.java b/src/main/java/org/codelibs/fess/helper/SuggestHelper.java
index 1cae3243573d4d7ea8882bdbb6455fc2aa04e98a..065ef50c457604ad9f5394945a7c1d9891b1ac36 100644
--- a/src/main/java/org/codelibs/fess/helper/SuggestHelper.java
+++ b/src/main/java/org/codelibs/fess/helper/SuggestHelper.java
@@ -15,6 +15,9 @@
  */
 package org.codelibs.fess.helper;
 
+import static org.codelibs.core.stream.StreamUtil.split;
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.ArrayList;
@@ -25,7 +28,6 @@ import java.util.List;
 import java.util.Set;
 import java.util.function.Consumer;
 import java.util.regex.Pattern;
-import java.util.stream.Stream;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
@@ -46,7 +48,6 @@ import org.codelibs.fess.suggest.index.contents.document.ESSourceReader;
 import org.codelibs.fess.suggest.settings.SuggestSettings;
 import org.codelibs.fess.suggest.util.SuggestUtil;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.elasticsearch.index.query.BoolQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 
@@ -80,21 +81,24 @@ public class SuggestHelper {
     @PostConstruct
     public void init() {
         fessConfig = ComponentUtil.getFessConfig();
-        stream(fessConfig.getSuggestFieldContents()).forEach(f -> contentFieldNameSet.add(f));
-        stream(fessConfig.getSuggestFieldTags()).forEach(f -> tagFieldNameSet.add(f));
-        stream(fessConfig.getSuggestFieldRoles()).forEach(f -> roleFieldNameSet.add(f));
-        contentFieldList = Arrays.asList(stream(fessConfig.getSuggestFieldContents()).toArray(n -> new String[n]));
-        stream(fessConfig.getSuggestRoleFilters()).forEach(filter -> {
+        split(fessConfig.getSuggestFieldContents(), ",").of(
+                stream -> stream.filter(StringUtil::isNotBlank).forEach(f -> contentFieldNameSet.add(f)));
+        split(fessConfig.getSuggestFieldTags(), ",").of(
+                stream -> stream.filter(StringUtil::isNotBlank).forEach(f -> tagFieldNameSet.add(f)));
+        split(fessConfig.getSuggestFieldRoles(), ",").of(
+                stream -> stream.filter(StringUtil::isNotBlank).forEach(f -> roleFieldNameSet.add(f)));
+        contentFieldList = Arrays.asList(stream(fessConfig.getSuggestFieldContents()).get(stream -> stream.toArray(n -> new String[n])));
+        split(fessConfig.getSuggestRoleFilters(), ",").of(stream -> stream.filter(StringUtil::isNotBlank).forEach(filter -> {
             roleFilterList.add(Pattern.compile(filter));
-        });
+        }));
 
         fessEsClient.admin().cluster().prepareHealth().setWaitForYellowStatus().execute().actionGet(fessConfig.getIndexHealthTimeout());
 
         suggester = Suggester.builder().build(fessEsClient, fessConfig.getIndexDocumentSearchIndex());
         suggester.settings().array().delete(SuggestSettings.DefaultKeys.SUPPORTED_FIELDS);
-        stream(fessConfig.getSuggestFieldIndexContents()).forEach(field -> {
+        split(fessConfig.getSuggestFieldIndexContents(), ",").of(stream -> stream.filter(StringUtil::isNotBlank).forEach(field -> {
             suggester.settings().array().add(SuggestSettings.DefaultKeys.SUPPORTED_FIELDS, field);
-        });
+        }));
         suggester.createIndexIfNothing();
     }
 
@@ -131,7 +135,7 @@ public class SuggestHelper {
                     }
 
                     if (sb.length() > 0) {
-                        StreamUtil.of(searchLog.getRoles()).forEach(role -> roles.add(role));
+                        stream(searchLog.getRoles()).of(stream -> stream.forEach(role -> roles.add(role)));
                         if (roles.stream().allMatch(v -> roleFilterList.stream().anyMatch(pattern -> pattern.matcher(v).matches()))) {
                             suggester.indexer().indexFromSearchWord(sb.toString(), fields.toArray(new String[fields.size()]),
                                     tags.toArray(new String[tags.size()]), roles.toArray(new String[roles.size()]), 1);
@@ -262,8 +266,4 @@ public class SuggestHelper {
         suggester.indexer().deleteBadWord(badWord);
     }
 
-    private Stream<String> stream(final String value) {
-        return StreamUtil.of(value.split(",")).filter(v -> StringUtil.isNotBlank(v));
-    }
-
 }
diff --git a/src/main/java/org/codelibs/fess/job/CrawlJob.java b/src/main/java/org/codelibs/fess/job/CrawlJob.java
index dc659dea7b73d4e4598c76277a46d45a70327c22..b5692afecd4bd6c546b51607d6e53a2492bf681d 100644
--- a/src/main/java/org/codelibs/fess/job/CrawlJob.java
+++ b/src/main/java/org/codelibs/fess/job/CrawlJob.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.job;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.FilenameFilter;
@@ -38,7 +40,6 @@ import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
 import org.codelibs.fess.util.InputStreamThread;
 import org.codelibs.fess.util.JobProcess;
-import org.codelibs.fess.util.StreamUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -323,8 +324,8 @@ public class CrawlJob {
         } else {
             cmdList.add("-Dfess.log.level=" + logLevel);
         }
-        StreamUtil.of(fessConfig.getJvmCrawlerOptionsAsArray()).filter(value -> StringUtil.isNotBlank(value))
-                .forEach(value -> cmdList.add(value));
+        stream(fessConfig.getJvmCrawlerOptionsAsArray()).of(
+                stream -> stream.filter(value -> StringUtil.isNotBlank(value)).forEach(value -> cmdList.add(value)));
 
         File ownTmpDir = null;
         final String tmpDir = System.getProperty("java.io.tmpdir");
@@ -338,7 +339,7 @@ public class CrawlJob {
         }
 
         if (StringUtil.isNotBlank(jvmOptions)) {
-            StreamUtil.of(jvmOptions.split(" ")).filter(s -> StringUtil.isNotBlank(s)).forEach(s -> cmdList.add(s));
+            stream(jvmOptions.split(" ")).of(stream -> stream.filter(s -> StringUtil.isNotBlank(s)).forEach(s -> cmdList.add(s)));
         }
 
         cmdList.add(Crawler.class.getCanonicalName());
diff --git a/src/main/java/org/codelibs/fess/job/SuggestJob.java b/src/main/java/org/codelibs/fess/job/SuggestJob.java
index bc1fed9eeb5587c2e84149c334c9ada249c96047..7e1618066d2c29762ec36d0673e37a7a04ec0e54 100644
--- a/src/main/java/org/codelibs/fess/job/SuggestJob.java
+++ b/src/main/java/org/codelibs/fess/job/SuggestJob.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.job;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.FilenameFilter;
@@ -36,7 +38,6 @@ import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
 import org.codelibs.fess.util.InputStreamThread;
 import org.codelibs.fess.util.JobProcess;
-import org.codelibs.fess.util.StreamUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -195,8 +196,8 @@ public class SuggestJob {
         } else {
             cmdList.add("-Dfess.log.level=" + logLevel);
         }
-        StreamUtil.of(fessConfig.getJvmSuggestOptionsAsArray()).filter(value -> StringUtil.isNotBlank(value))
-                .forEach(value -> cmdList.add(value));
+        stream(fessConfig.getJvmSuggestOptionsAsArray()).of(
+                stream -> stream.filter(value -> StringUtil.isNotBlank(value)).forEach(value -> cmdList.add(value)));
 
         File ownTmpDir = null;
         final String tmpDir = System.getProperty("java.io.tmpdir");
diff --git a/src/main/java/org/codelibs/fess/ldap/LdapManager.java b/src/main/java/org/codelibs/fess/ldap/LdapManager.java
index dca9842f5b8f9a46a32c97afe4ed01c24ab84d33..1e888f0cc26d191b037019ff57b2b678693d2c10 100644
--- a/src/main/java/org/codelibs/fess/ldap/LdapManager.java
+++ b/src/main/java/org/codelibs/fess/ldap/LdapManager.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.ldap;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.util.ArrayList;
 import java.util.Base64;
 import java.util.Collections;
@@ -49,7 +51,6 @@ import org.codelibs.fess.helper.SystemHelper;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
 import org.codelibs.fess.util.OptionalUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.dbflute.optional.OptionalEntity;
 import org.dbflute.util.DfTypeUtil;
 import org.slf4j.Logger;
@@ -331,13 +332,13 @@ public class LdapManager {
                                 oldRoleList.add(name);
                             }
                         });
-                        final List<String> newGroupList = StreamUtil.of(user.getGroupNames()).collect(Collectors.toList());
-                        StreamUtil.of(user.getGroupNames()).forEach(name -> {
+                        final List<String> newGroupList = stream(user.getGroupNames()).get(stream -> stream.collect(Collectors.toList()));
+                        stream(user.getGroupNames()).of(stream -> stream.forEach(name -> {
                             if (oldGroupList.contains(name)) {
                                 oldGroupList.remove(name);
                                 newGroupList.remove(name);
                             }
-                        });
+                        }));
                         oldGroupList.stream().forEach(
                                 name -> {
                                     search(fessConfig.getLdapAdminGroupBaseDn(), fessConfig.getLdapAdminGroupFilter(name), null, adminEnv,
@@ -364,13 +365,13 @@ public class LdapManager {
                                             });
                                 });
 
-                        final List<String> newRoleList = StreamUtil.of(user.getRoleNames()).collect(Collectors.toList());
-                        StreamUtil.of(user.getRoleNames()).forEach(name -> {
+                        final List<String> newRoleList = stream(user.getRoleNames()).get(stream -> stream.collect(Collectors.toList()));
+                        stream(user.getRoleNames()).of(stream -> stream.forEach(name -> {
                             if (oldRoleList.contains(name)) {
                                 oldRoleList.remove(name);
                                 newRoleList.remove(name);
                             }
-                        });
+                        }));
                         oldRoleList.stream().forEach(
                                 name -> {
                                     search(fessConfig.getLdapAdminRoleBaseDn(), fessConfig.getLdapAdminRoleFilter(name), null, adminEnv,
@@ -397,8 +398,8 @@ public class LdapManager {
                                             });
                                 });
                     } else {
-                        StreamUtil.of(user.getGroupNames()).forEach(
-                                name -> {
+                        stream(user.getGroupNames()).of(
+                                stream -> stream.forEach(name -> {
                                     search(fessConfig.getLdapAdminGroupBaseDn(), fessConfig.getLdapAdminGroupFilter(name), null, adminEnv,
                                             subResult -> {
                                                 if (!!subResult.isEmpty()) {
@@ -410,10 +411,10 @@ public class LdapManager {
                                                 modifyAddEntry(modifyList, "member", userDN);
                                                 modify(fessConfig.getLdapAdminGroupSecurityPrincipal(name), modifyList, adminEnv);
                                             });
-                                });
+                                }));
 
-                        StreamUtil.of(user.getRoleNames()).forEach(
-                                name -> {
+                        stream(user.getRoleNames()).of(
+                                stream -> stream.forEach(name -> {
                                     search(fessConfig.getLdapAdminRoleBaseDn(), fessConfig.getLdapAdminRoleFilter(name), null, adminEnv,
                                             subResult -> {
                                                 if (!!subResult.isEmpty()) {
@@ -425,7 +426,7 @@ public class LdapManager {
                                                 modifyAddEntry(modifyList, "member", userDN);
                                                 modify(fessConfig.getLdapAdminRoleSecurityPrincipal(name), modifyList, adminEnv);
                                             });
-                                });
+                                }));
                     }
                 });
 
@@ -764,7 +765,7 @@ public class LdapManager {
         final Supplier<Hashtable<String, String>> adminEnv = () -> createAdminEnv();
         final String userDN = fessConfig.getLdapAdminUserSecurityPrincipal(user.getName());
 
-        StreamUtil.of(user.getGroupNames()).forEach(name -> {
+        stream(user.getGroupNames()).of(stream -> stream.forEach(name -> {
             search(fessConfig.getLdapAdminGroupBaseDn(), fessConfig.getLdapAdminGroupFilter(name), null, adminEnv, subResult -> {
                 if (!!subResult.isEmpty()) {
                     final Group group = new Group();
@@ -775,8 +776,8 @@ public class LdapManager {
                 modifyDeleteEntry(modifyList, "member", userDN);
                 modify(fessConfig.getLdapAdminGroupSecurityPrincipal(name), modifyList, adminEnv);
             });
-        });
-        StreamUtil.of(user.getRoleNames()).forEach(name -> {
+        }));
+        stream(user.getRoleNames()).of(stream -> stream.forEach(name -> {
             search(fessConfig.getLdapAdminRoleBaseDn(), fessConfig.getLdapAdminRoleFilter(name), null, adminEnv, subResult -> {
                 if (!!subResult.isEmpty()) {
                     final Role role = new Role();
@@ -787,7 +788,7 @@ public class LdapManager {
                 modifyDeleteEntry(modifyList, "member", userDN);
                 modify(fessConfig.getLdapAdminRoleSecurityPrincipal(name), modifyList, adminEnv);
             });
-        });
+        }));
 
         search(fessConfig.getLdapAdminUserBaseDn(), fessConfig.getLdapAdminUserFilter(user.getName()), null, adminEnv, result -> {
             if (!result.isEmpty()) {
diff --git a/src/main/java/org/codelibs/fess/ldap/LdapUser.java b/src/main/java/org/codelibs/fess/ldap/LdapUser.java
index 62ecab8a6d79b330d7a081da3916ba4272b52e16..4c4ca77b5bcd7a18629974734f331c8151fdb0c7 100644
--- a/src/main/java/org/codelibs/fess/ldap/LdapUser.java
+++ b/src/main/java/org/codelibs/fess/ldap/LdapUser.java
@@ -15,16 +15,17 @@
  */
 package org.codelibs.fess.ldap;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.util.Hashtable;
-import java.util.stream.Stream;
 
 import javax.naming.Context;
 
+import org.apache.commons.lang3.ArrayUtils;
 import org.codelibs.core.lang.StringUtil;
 import org.codelibs.fess.entity.FessUser;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 
 public class LdapUser implements FessUser {
 
@@ -54,9 +55,8 @@ public class LdapUser implements FessUser {
             final String accountFilter = ComponentUtil.getFessConfig().getLdapAccountFilter();
             if (StringUtil.isNotBlank(baseDn) && StringUtil.isNotBlank(accountFilter)) {
                 permissions =
-                        Stream.concat(Stream.of(fessConfig.getRoleSearchUserPrefix() + getName()),
-                                StreamUtil.of(ComponentUtil.getLdapManager().getRoles(this, baseDn, accountFilter))).toArray(
-                                n -> new String[n]);
+                        ArrayUtils.addAll(ComponentUtil.getLdapManager().getRoles(this, baseDn, accountFilter),
+                                fessConfig.getRoleSearchUserPrefix() + getName());
             } else {
                 permissions = StringUtil.EMPTY_STRINGS;
             }
@@ -67,15 +67,17 @@ public class LdapUser implements FessUser {
     @Override
     public String[] getRoleNames() {
         final FessConfig fessConfig = ComponentUtil.getFessConfig();
-        return StreamUtil.of(getPermissions()).filter(s -> s.startsWith(fessConfig.getRoleSearchRolePrefix())).map(s -> s.substring(1))
-                .toArray(n -> new String[n]);
+        return stream(getPermissions()).get(
+                stream -> stream.filter(s -> s.startsWith(fessConfig.getRoleSearchRolePrefix())).map(s -> s.substring(1))
+                        .toArray(n -> new String[n]));
     }
 
     @Override
     public String[] getGroupNames() {
         final FessConfig fessConfig = ComponentUtil.getFessConfig();
-        return StreamUtil.of(getPermissions()).filter(s -> s.startsWith(fessConfig.getRoleSearchGroupPrefix())).map(s -> s.substring(1))
-                .toArray(n -> new String[n]);
+        return stream(getPermissions()).get(
+                stream -> stream.filter(s -> s.startsWith(fessConfig.getRoleSearchGroupPrefix())).map(s -> s.substring(1))
+                        .toArray(n -> new String[n]));
     }
 
     public Hashtable<String, String> getEnvironment() {
diff --git a/src/main/java/org/codelibs/fess/mylasta/action/FessUserBean.java b/src/main/java/org/codelibs/fess/mylasta/action/FessUserBean.java
index 6805c8e2082d1e380f5a68d24fb2d8f8867f2b81..18f90ec5f2b348c0a76002415c64c0947f26e859 100644
--- a/src/main/java/org/codelibs/fess/mylasta/action/FessUserBean.java
+++ b/src/main/java/org/codelibs/fess/mylasta/action/FessUserBean.java
@@ -15,9 +15,10 @@
  */
 package org.codelibs.fess.mylasta.action;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import org.codelibs.core.lang.StringUtil;
 import org.codelibs.fess.entity.FessUser;
-import org.codelibs.fess.util.StreamUtil;
 import org.lastaflute.web.login.TypicalUserBean;
 
 /**
@@ -67,19 +68,21 @@ public class FessUserBean extends TypicalUserBean<String> { // #change_it also L
     }
 
     public boolean hasRole(final String role) {
-        return StreamUtil.of(user.getRoleNames()).anyMatch(s -> s.equals(role));
+        return stream(user.getRoleNames()).get(stream -> stream.anyMatch(s -> s.equals(role)));
     }
 
     public boolean hasRoles(final String[] acceptedRoles) {
-        return StreamUtil.of(user.getRoleNames()).anyMatch(s1 -> StreamUtil.of(acceptedRoles).anyMatch(s2 -> s2.equals(s1)));
+        return stream(user.getRoleNames()).get(
+                stream -> stream.anyMatch(s1 -> stream(acceptedRoles).get(s3 -> s3.anyMatch(s2 -> s2.equals(s1)))));
     }
 
     public boolean hasGroup(final String group) {
-        return StreamUtil.of(user.getGroupNames()).anyMatch(s -> s.equals(group));
+        return stream(user.getGroupNames()).get(stream -> stream.anyMatch(s -> s.equals(group)));
     }
 
     public boolean hasGroups(final String[] acceptedGroups) {
-        return StreamUtil.of(user.getGroupNames()).anyMatch(s1 -> StreamUtil.of(acceptedGroups).anyMatch(s2 -> s2.equals(s1)));
+        return stream(user.getGroupNames()).get(
+                stream -> stream.anyMatch(s1 -> stream(acceptedGroups).get(s3 -> s3.anyMatch(s2 -> s2.equals(s1)))));
     }
 
     public static FessUserBean empty() {
diff --git a/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java b/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java
index 67448f1115c3b66f33d03c5ff9aba5e0afde1f7d..2be631a4c592d2d405b4ba2941377769be6760ba 100644
--- a/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java
+++ b/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.mylasta.direction;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashSet;
@@ -37,7 +39,6 @@ import org.codelibs.fess.Constants;
 import org.codelibs.fess.helper.PermissionHelper;
 import org.codelibs.fess.mylasta.action.FessUserBean;
 import org.codelibs.fess.util.ComponentUtil;
-import org.codelibs.fess.util.StreamUtil;
 import org.dbflute.optional.OptionalThing;
 import org.elasticsearch.action.search.SearchRequestBuilder;
 import org.lastaflute.job.LaJob;
@@ -119,7 +120,7 @@ public interface FessProp {
                 map = Collections.emptyMap();
             } else {
                 final Set<String> keySet = new HashSet<>();
-                map = StreamUtil.of(value.split("\n")).filter(StringUtil::isNotBlank).map(s -> {
+                map = stream(value.split("\n")).get(stream -> (Map<String, String>) stream.filter(StringUtil::isNotBlank).map(s -> {
                     final String[] pair = s.split("=");
                     if (pair.length == 1) {
                         return new Pair<>(StringUtil.EMPTY, pair[0].trim());
@@ -131,7 +132,7 @@ public interface FessProp {
                         return new Pair<>(pair[0].trim(), sortValue);
                     }
                     return null;
-                }).filter(o -> o != null && keySet.add(o.getFirst())).collect(Collectors.toMap(Pair::getFirst, d -> d.getSecond()));
+                }).filter(o -> o != null && keySet.add(o.getFirst())).collect(Collectors.toMap(Pair::getFirst, d -> d.getSecond())));
             }
             propMap.put(DEFAULT_SORT_VALUES, map);
         }
@@ -144,8 +145,9 @@ public interface FessProp {
                         return e.getValue();
                     }
                     if (userBean.map(
-                            user -> StreamUtil.of(user.getRoles()).anyMatch(s -> key.equals(ROLE_VALUE_PREFIX + s))
-                                    || StreamUtil.of(user.getGroups()).anyMatch(s -> key.equals(GROUP_VALUE_PREFIX + s))).orElse(false)) {
+                            user -> stream(user.getRoles()).get(stream -> stream.anyMatch(s -> key.equals(ROLE_VALUE_PREFIX + s)))
+                                    || stream(user.getGroups()).get(stream -> stream.anyMatch(s -> key.equals(GROUP_VALUE_PREFIX + s))))
+                            .orElse(false)) {
                         return e.getValue();
                     }
                     return null;
@@ -170,7 +172,7 @@ public interface FessProp {
                 map = Collections.emptyMap();
             } else {
                 final Set<String> keySet = new HashSet<>();
-                map = StreamUtil.of(value.split("\n")).filter(StringUtil::isNotBlank).map(s -> {
+                map = stream(value.split("\n")).get(stream -> (Map<String, String>) stream.filter(StringUtil::isNotBlank).map(s -> {
                     final String[] pair = s.split("=");
                     if (pair.length == 1) {
                         return new Pair<>(StringUtil.EMPTY, pair[0].trim());
@@ -178,7 +180,7 @@ public interface FessProp {
                         return new Pair<>(pair[0].trim(), pair[1].trim());
                     }
                     return null;
-                }).filter(o -> o != null && keySet.add(o.getFirst())).collect(Collectors.toMap(Pair::getFirst, d -> d.getSecond()));
+                }).filter(o -> o != null && keySet.add(o.getFirst())).collect(Collectors.toMap(Pair::getFirst, d -> d.getSecond())));
             }
             propMap.put(DEFAULT_LABEL_VALUES, map);
         }
@@ -191,8 +193,9 @@ public interface FessProp {
                         return e.getValue();
                     }
                     if (userBean.map(
-                            user -> StreamUtil.of(user.getRoles()).anyMatch(s -> key.equals(ROLE_VALUE_PREFIX + s))
-                                    || StreamUtil.of(user.getGroups()).anyMatch(s -> key.equals(GROUP_VALUE_PREFIX + s))).orElse(false)) {
+                            user -> stream(user.getRoles()).get(stream -> stream.anyMatch(s -> key.equals(ROLE_VALUE_PREFIX + s)))
+                                    || stream(user.getGroups()).get(stream -> stream.anyMatch(s -> key.equals(GROUP_VALUE_PREFIX + s))))
+                            .orElse(false)) {
                         return e.getValue();
                     }
                     return null;
@@ -495,7 +498,7 @@ public interface FessProp {
         if (mimetypes.length == 1 && StringUtil.isBlank(mimetypes[0])) {
             return true;
         }
-        return StreamUtil.of(mimetypes).anyMatch(s -> s.equalsIgnoreCase(mimetype));
+        return stream(mimetypes).get(stream -> stream.anyMatch(s -> s.equalsIgnoreCase(mimetype)));
     }
 
     String getCrawlerDocumentCacheSupportedMimetypes();
@@ -505,7 +508,7 @@ public interface FessProp {
         if (mimetypes.length == 1 && StringUtil.isBlank(mimetypes[0])) {
             return true;
         }
-        return StreamUtil.of(mimetypes).anyMatch(s -> s.equalsIgnoreCase(mimetype));
+        return stream(mimetypes).get(stream -> stream.anyMatch(s -> s.equalsIgnoreCase(mimetype)));
     }
 
     String getIndexerClickCountEnabled();
@@ -538,7 +541,7 @@ public interface FessProp {
         if (StringUtil.isBlank(getJobSystemJobIds())) {
             return false;
         }
-        return StreamUtil.of(getJobSystemJobIds().split(",")).anyMatch(s -> s.equals(id));
+        return stream(getJobSystemJobIds().split(",")).get(stream -> stream.anyMatch(s -> s.equals(id)));
     }
 
     String getSmbAvailableSidTypes();
@@ -548,15 +551,13 @@ public interface FessProp {
             return false;
         }
         final String value = Integer.toString(sidType);
-        return StreamUtil.of(getSmbAvailableSidTypes().split(",")).anyMatch(s -> {
-            return s.equals(value);
-        });
+        return stream(getSmbAvailableSidTypes().split(",")).get(stream -> stream.anyMatch(s -> s.equals(value)));
     }
 
     String getSupportedLanguages();
 
     public default String[] getSupportedLanguagesAsArray() {
-        return StreamUtil.of(getSupportedLanguages().split(",")).filter(StringUtil::isNotBlank).toArray(n -> new String[n]);
+        return stream(getSupportedLanguages().split(",")).get(stream -> stream.filter(StringUtil::isNotBlank).toArray(n -> new String[n]));
     }
 
     String getOnlineHelpSupportedLangs();
@@ -565,25 +566,29 @@ public interface FessProp {
         if (StringUtil.isBlank(getOnlineHelpSupportedLangs())) {
             return false;
         }
-        return StreamUtil.of(getOnlineHelpSupportedLangs().split(",")).filter(StringUtil::isNotBlank).anyMatch(s -> s.equals(lang));
+        return stream(getOnlineHelpSupportedLangs().split(",")).get(
+                stream -> stream.filter(StringUtil::isNotBlank).anyMatch(s -> s.equals(lang)));
     }
 
     String getSupportedUploadedJsExtentions();
 
     public default String[] getSupportedUploadedJsExtentionsAsArray() {
-        return StreamUtil.of(getSupportedUploadedJsExtentions().split(",")).filter(StringUtil::isNotBlank).toArray(n -> new String[n]);
+        return stream(getSupportedUploadedJsExtentions().split(",")).get(
+                stream -> stream.filter(StringUtil::isNotBlank).toArray(n -> new String[n]));
     }
 
     String getSupportedUploadedCssExtentions();
 
     public default String[] getSupportedUploadedCssExtentionsAsArray() {
-        return StreamUtil.of(getSupportedUploadedCssExtentions().split(",")).filter(StringUtil::isNotBlank).toArray(n -> new String[n]);
+        return stream(getSupportedUploadedCssExtentions().split(",")).get(
+                stream -> stream.filter(StringUtil::isNotBlank).toArray(n -> new String[n]));
     }
 
     String getSupportedUploadedMediaExtentions();
 
     public default String[] getSupportedUploadedMediaExtentionsAsArray() {
-        return StreamUtil.of(getSupportedUploadedMediaExtentions().split(",")).filter(StringUtil::isNotBlank).toArray(n -> new String[n]);
+        return stream(getSupportedUploadedMediaExtentions().split(",")).get(
+                stream -> stream.filter(StringUtil::isNotBlank).toArray(n -> new String[n]));
     }
 
     String getJobTemplateTitleWeb();
@@ -627,11 +632,11 @@ public interface FessProp {
         Pattern[] patterns = (Pattern[]) propMap.get(CRAWLER_METADATA_CONTENT_EXCLUDES);
         if (patterns == null) {
             patterns =
-                    StreamUtil.of(getCrawlerMetadataContentExcludes().split(",")).filter(StringUtil::isNotBlank)
-                            .map(v -> Pattern.compile(v)).toArray(n -> new Pattern[n]);
+                    stream(getCrawlerMetadataContentExcludes().split(",")).get(
+                            stream -> stream.filter(StringUtil::isNotBlank).map(v -> Pattern.compile(v)).toArray(n -> new Pattern[n]));
             propMap.put(CRAWLER_METADATA_CONTENT_EXCLUDES, patterns);
         }
-        return !StreamUtil.of(patterns).anyMatch(p -> p.matcher(name).matches());
+        return !stream(patterns).get(stream -> stream.anyMatch(p -> p.matcher(name).matches()));
     }
 
     String getCrawlerMetadataNameMapping();
@@ -640,18 +645,20 @@ public interface FessProp {
         @SuppressWarnings("unchecked")
         Map<String, Pair<String, String>> params = (Map<String, Pair<String, String>>) propMap.get(CRAWLER_METADATA_NAME_MAPPING);
         if (params == null) {
-            params = StreamUtil.of(getCrawlerMetadataNameMapping().split("\n")).filter(StringUtil::isNotBlank).map(v -> {
-                final String[] values = v.split("=");
-                if (values.length == 2) {
-                    final String[] subValues = values[1].split(":");
-                    if (subValues.length == 2) {
-                        return new Tuple3<>(values[0], subValues[0], subValues[1]);
-                    } else {
-                        return new Tuple3<>(values[0], values[1], Constants.MAPPING_TYPE_ARRAY);
-                    }
-                }
-                return null;
-            }).collect(Collectors.toMap(Tuple3::getValue1, d -> new Pair<>(d.getValue2(), d.getValue3())));
+            params =
+                    stream(getCrawlerMetadataNameMapping().split("\n")).get(
+                            stream -> (Map<String, Pair<String, String>>) stream.filter(StringUtil::isNotBlank).map(v -> {
+                                final String[] values = v.split("=");
+                                if (values.length == 2) {
+                                    final String[] subValues = values[1].split(":");
+                                    if (subValues.length == 2) {
+                                        return new Tuple3<>(values[0], subValues[0], subValues[1]);
+                                    } else {
+                                        return new Tuple3<>(values[0], values[1], Constants.MAPPING_TYPE_ARRAY);
+                                    }
+                                }
+                                return null;
+                            }).collect(Collectors.toMap(Tuple3::getValue1, d -> new Pair<>(d.getValue2(), d.getValue3()))));
             propMap.put(CRAWLER_METADATA_NAME_MAPPING, params);
         }
         return params.get(name);
@@ -660,19 +667,22 @@ public interface FessProp {
     String getSuggestPopularWordFields();
 
     public default String[] getSuggestPopularWordFieldsAsArray() {
-        return StreamUtil.of(getSuggestPopularWordFields().split("\n")).filter(StringUtil::isNotBlank).toArray(n -> new String[n]);
+        return stream(getSuggestPopularWordFields().split("\n")).get(
+                stream -> stream.filter(StringUtil::isNotBlank).toArray(n -> new String[n]));
     }
 
     String getSuggestPopularWordTags();
 
     public default String[] getSuggestPopularWordTagsAsArray() {
-        return StreamUtil.of(getSuggestPopularWordTags().split("\n")).filter(StringUtil::isNotBlank).toArray(n -> new String[n]);
+        return stream(getSuggestPopularWordTags().split("\n")).get(
+                stream -> stream.filter(StringUtil::isNotBlank).toArray(n -> new String[n]));
     }
 
     String getSuggestPopularWordExcludes();
 
     public default String[] getSuggestPopularWordExcludesAsArray() {
-        return StreamUtil.of(getSuggestPopularWordExcludes().split("\n")).filter(StringUtil::isNotBlank).toArray(n -> new String[n]);
+        return stream(getSuggestPopularWordExcludes().split("\n")).get(
+                stream -> stream.filter(StringUtil::isNotBlank).toArray(n -> new String[n]));
     }
 
     String getQueryReplaceTermWithPrefixQuery();
@@ -689,7 +699,7 @@ public interface FessProp {
         if (StringUtil.isNotBlank(getQueryDefaultLanguages())) {
             String[] langs = (String[]) propMap.get("queryDefaultLanguages");
             if (langs == null) {
-                langs = StreamUtil.of(getQueryDefaultLanguages().split(",")).map(s -> s.trim()).toArray(n -> new String[n]);
+                langs = stream(getQueryDefaultLanguages().split(",")).get(stream -> stream.map(s -> s.trim()).toArray(n -> new String[n]));
                 propMap.put("queryDefaultLanguages", langs);
 
             }
@@ -707,13 +717,15 @@ public interface FessProp {
         @SuppressWarnings("unchecked")
         Map<String, String> params = (Map<String, String>) propMap.get(QUERY_LANGUAGE_MAPPING);
         if (params == null) {
-            params = StreamUtil.of(getQueryLanguageMapping().split("\n")).filter(StringUtil::isNotBlank).map(v -> {
-                final String[] values = v.split("=");
-                if (values.length == 2) {
-                    return new Pair<>(values[0], values[1]);
-                }
-                return null;
-            }).collect(Collectors.toMap(Pair::getFirst, d -> d.getSecond()));
+            params =
+                    stream(getQueryLanguageMapping().split("\n")).get(
+                            stream -> (Map<String, String>) stream.filter(StringUtil::isNotBlank).map(v -> {
+                                final String[] values = v.split("=");
+                                if (values.length == 2) {
+                                    return new Pair<>(values[0], values[1]);
+                                }
+                                return null;
+                            }).collect(Collectors.toMap(Pair::getFirst, d -> d.getSecond())));
             propMap.put(QUERY_LANGUAGE_MAPPING, params);
         }
 
@@ -739,14 +751,16 @@ public interface FessProp {
     String getSupportedUploadedFiles();
 
     public default boolean isSupportedUploadedFile(final String name) {
-        return StreamUtil.of(getSuggestPopularWordExcludes().split(",")).filter(StringUtil::isNotBlank).anyMatch(s -> s.equals(name));
+        return stream(getSuggestPopularWordExcludes().split(",")).get(
+                stream -> stream.filter(StringUtil::isNotBlank).anyMatch(s -> s.equals(name)));
     }
 
     String getLdapAdminUserObjectClasses();
 
     public default Attribute getLdapAdminUserObjectClassAttribute() {
         final Attribute oc = new BasicAttribute("objectClass");
-        StreamUtil.of(getLdapAdminUserObjectClasses().split(",")).filter(StringUtil::isNotBlank).forEach(s -> oc.add(s.trim()));
+        stream(getLdapAdminUserObjectClasses().split(",")).of(
+                stream -> stream.filter(StringUtil::isNotBlank).forEach(s -> oc.add(s.trim())));
         return oc;
     }
 
@@ -771,7 +785,8 @@ public interface FessProp {
 
     public default Attribute getLdapAdminRoleObjectClassAttribute() {
         final Attribute oc = new BasicAttribute("objectClass");
-        StreamUtil.of(getLdapAdminRoleObjectClasses().split(",")).filter(StringUtil::isNotBlank).forEach(s -> oc.add(s.trim()));
+        stream(getLdapAdminRoleObjectClasses().split(",")).of(
+                stream -> stream.filter(StringUtil::isNotBlank).forEach(s -> oc.add(s.trim())));
         return oc;
     }
 
@@ -796,7 +811,8 @@ public interface FessProp {
 
     public default Attribute getLdapAdminGroupObjectClassAttribute() {
         final Attribute oc = new BasicAttribute("objectClass");
-        StreamUtil.of(getLdapAdminGroupObjectClasses().split(",")).filter(StringUtil::isNotBlank).forEach(s -> oc.add(s.trim()));
+        stream(getLdapAdminGroupObjectClasses().split(",")).of(
+                stream -> stream.filter(StringUtil::isNotBlank).forEach(s -> oc.add(s.trim())));
         return oc;
     }
 
@@ -820,7 +836,7 @@ public interface FessProp {
     String getAuthenticationAdminUsers();
 
     public default boolean isAdminUser(final String username) {
-        return StreamUtil.of(getAuthenticationAdminUsers().split(",")).anyMatch(s -> s.equals(username));
+        return stream(getAuthenticationAdminUsers().split(",")).get(stream -> stream.anyMatch(s -> s.equals(username)));
     }
 
     boolean isLdapAdminEnabled();
@@ -835,23 +851,23 @@ public interface FessProp {
     String getCrawlerWebProtocols();
 
     public default String[] getCrawlerWebProtocolsAsArray() {
-        return StreamUtil.of(getCrawlerWebProtocols().split(",")).filter(StringUtil::isNotBlank).map(s -> s.trim() + ":")
-                .toArray(n -> new String[n]);
+        return stream(getCrawlerWebProtocols().split(",")).get(
+                stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim() + ":").toArray(n -> new String[n]));
     }
 
     public default boolean isValidCrawlerWebProtocol(final String url) {
-        return StreamUtil.of(getCrawlerWebProtocolsAsArray()).anyMatch(s -> url.startsWith(s));
+        return stream(getCrawlerWebProtocolsAsArray()).get(stream -> stream.anyMatch(s -> url.startsWith(s)));
     }
 
     String getCrawlerFileProtocols();
 
     public default String[] getCrawlerFileProtocolsAsArray() {
-        return StreamUtil.of(getCrawlerFileProtocols().split(",")).filter(StringUtil::isNotBlank).map(s -> s.trim() + ":")
-                .toArray(n -> new String[n]);
+        return stream(getCrawlerFileProtocols().split(",")).get(
+                stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim() + ":").toArray(n -> new String[n]));
     }
 
     public default boolean isValidCrawlerFileProtocol(final String url) {
-        return StreamUtil.of(getCrawlerFileProtocolsAsArray()).anyMatch(s -> url.startsWith(s));
+        return stream(getCrawlerFileProtocolsAsArray()).get(stream -> stream.anyMatch(s -> url.startsWith(s)));
     }
 
     public default void processSearchPreference(final SearchRequestBuilder searchRequestBuilder, final OptionalThing<FessUserBean> userBean) {
@@ -877,19 +893,21 @@ public interface FessProp {
 
     public default String[] getSearchDefaultPermissionsAsArray() {
         final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
-        return StreamUtil.of(getRoleSearchDefaultPermissions().split(",")).map(p -> permissionHelper.encode(p))
-                .filter(StringUtil::isNotBlank).distinct().toArray(n -> new String[n]);
+        return stream(getRoleSearchDefaultPermissions().split(","))
+                .get(stream -> stream.map(p -> permissionHelper.encode(p)).filter(StringUtil::isNotBlank).distinct()
+                        .toArray(n -> new String[n]));
     }
 
     public default String getSearchDefaultDisplayPermission() {
-        return StreamUtil.of(getRoleSearchDefaultPermissions().split(",")).filter(StringUtil::isNotBlank).distinct()
-                .collect(Collectors.joining("\n"));
+        return stream(getRoleSearchDefaultPermissions().split(",")).get(
+                stream -> stream.filter(StringUtil::isNotBlank).distinct().collect(Collectors.joining("\n")));
     }
 
     String getQueryGeoFields();
 
     public default String[] getQueryGeoFieldsAsArray() {
-        return StreamUtil.of(getQueryGeoFields().split(",")).map(s -> s.trim()).filter(StringUtil::isNotBlank).toArray(n -> new String[n]);
+        return stream(getQueryGeoFields().split(",")).get(
+                stream -> stream.map(s -> s.trim()).filter(StringUtil::isNotBlank).toArray(n -> new String[n]));
     }
 
 }
diff --git a/src/main/java/org/codelibs/fess/util/QueryStringBuilder.java b/src/main/java/org/codelibs/fess/util/QueryStringBuilder.java
index 6b29a7cafebfdbeb15f17d266efc95063b897f4e..cf51b574ca0361967d52aee3e6f1186d4d1abcf5 100644
--- a/src/main/java/org/codelibs/fess/util/QueryStringBuilder.java
+++ b/src/main/java/org/codelibs/fess/util/QueryStringBuilder.java
@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.util;
 
+import static org.codelibs.core.stream.StreamUtil.stream;
+
 import java.util.Map;
 
 import org.codelibs.core.lang.StringUtil;
@@ -33,10 +35,10 @@ public class QueryStringBuilder {
         if (StringUtil.isNotBlank(query)) {
             queryBuf.append('(').append(query).append(')');
         }
-        StreamUtil.of(extraQueries)
-                .filter(q -> StringUtil.isNotBlank(q) && q.length() <= fessConfig.getQueryMaxLengthAsInteger().intValue())
-                .forEach(q -> queryBuf.append(' ').append(q));
-        StreamUtil.of(fieldMap).forEach(entry -> {
+        stream(extraQueries).of(
+                stream -> stream.filter(q -> StringUtil.isNotBlank(q) && q.length() <= fessConfig.getQueryMaxLengthAsInteger().intValue())
+                        .forEach(q -> queryBuf.append(' ').append(q)));
+        stream(fieldMap).of(stream -> stream.forEach(entry -> {
             final String key = entry.getKey();
             final String[] values = entry.getValue();
             if (values == null) {
@@ -56,7 +58,7 @@ public class QueryStringBuilder {
                 }
                 queryBuf.append(')');
             }
-        });
+        }));
         return queryBuf.toString();
     }
 
diff --git a/src/main/java/org/codelibs/fess/util/StreamUtil.java b/src/main/java/org/codelibs/fess/util/StreamUtil.java
deleted file mode 100644
index 39af27684ccd6752c66d0e6b357933f021892a5b..0000000000000000000000000000000000000000
--- a/src/main/java/org/codelibs/fess/util/StreamUtil.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2012-2016 CodeLibs Project and the Others.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
- * either express or implied. See the License for the specific language
- * governing permissions and limitations under the License.
- */
-package org.codelibs.fess.util;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Map;
-import java.util.stream.Stream;
-
-public class StreamUtil {
-    @SafeVarargs
-    public static <T> Stream<T> of(final T... values) {
-        if (values != null) {
-            return Arrays.stream(values);
-        } else {
-            return Collections.<T> emptyList().stream();
-        }
-    }
-
-    public static Stream<String> splitOf(final String value, final String regex) {
-        if (value != null) {
-            return Arrays.stream(value.split(regex));
-        } else {
-            return Collections.<String> emptyList().stream();
-        }
-    }
-
-    public static <K, V> Stream<Map.Entry<K, V>> of(final Map<K, V> map) {
-        if (map != null) {
-            return map.entrySet().stream();
-        } else {
-            return Collections.<K, V> emptyMap().entrySet().stream();
-        }
-    }
-
-}
diff --git a/src/test/java/org/codelibs/fess/util/StreamUtilTest.java b/src/test/java/org/codelibs/fess/util/StreamUtilTest.java
deleted file mode 100644
index 69b81627daa46708ee492d7ef11ee3285940668d..0000000000000000000000000000000000000000
--- a/src/test/java/org/codelibs/fess/util/StreamUtilTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2012-2016 CodeLibs Project and the Others.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
- * either express or implied. See the License for the specific language
- * governing permissions and limitations under the License.
- */
-package org.codelibs.fess.util;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.stream.Stream;
-
-import org.codelibs.fess.unit.UnitFessTestCase;
-
-public class StreamUtilTest extends UnitFessTestCase {
-
-    public void test_ofValues() {
-        String[] values = { "value1", "value2" };
-        Stream<String> stream = StreamUtil.of(values[0], values[1]);
-        Object[] array = stream.toArray();
-        for (int i = 0; i < 2; i++) {
-            assertEquals(values[i], array[i]);
-        }
-    }
-
-    public void test_ofNull() {
-        assertEquals(0, StreamUtil.of().toArray().length);
-        Object[] o = {};
-        assertEquals(0, StreamUtil.of(o).toArray().length);
-        Map<Object, Object> map = new HashMap<Object, Object>();
-        assertEquals(0, StreamUtil.of(map).toArray().length);
-    }
-
-    public void test_ofMap() {
-        Map<String, String> map = new HashMap<String, String>();
-        map.put("key1", "value1");
-        map.put("key2", "value2");
-        Stream<Map.Entry<String, String>> stream = StreamUtil.of(map);
-        stream.forEach(m -> assertEquals(map.get(m.getKey()), m.getValue()));
-    }
-
-}