Java 8 Streams - Iterator根据条件映射和删除

时间:2015-11-24 09:57:19

标签: java java-8 java-stream

我正在试图弄清楚如何重写这个以使用流和过滤器来缩小我的标准并在必要时从地图中删除。

Iterator<Map.Entry<String,Object>> iter = listOfPossibleParams.entrySet().iterator();
while (iter.hasNext()) {
    Map.Entry<String,Object> entry = iter.next();
    if(entry.getValue() instanceof String) {
        if (StringUtils.isBlank((String) entry.getValue())) {
            iter.remove();
        }
    }
}

我最初在想这样的事情,但它显然不能用作语法错误:

listOfPossibleParams.entrySet()
            .stream()
            .filter(p -> p.getValue() instanceof String)
            .removeIf(e -> StringUtils.isBlank((String)e.getValue()));

1 个答案:

答案 0 :(得分:15)

如果你可以修改Map,那么你可以这样做:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout

        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <include
                android:id="@+id/hmebar"
                layout="@layout/toolbar" />

            <include layout="@layout/banner" />

            <include layout="@layout/featured_products" />
        </LinearLayout>

    </RelativeLayout>


    <ListView
        android:id="@+id/nav_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#fff"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>

如果你想建立一个新的地图,你可以:

listOfPossibleParams.values()
                    .removeIf(v -> v instanceof String && StringUtils.isBlank((String) v));