使用Java 8过滤和翻译自定义地图的功能

时间:2016-07-06 15:38:13

标签: java

我有一个任务,我需要在抽象方法中实现一些功能。我的想法是使用Java 8,但我不熟悉使用Java 8进行编程。以下是我需要实现的抽象类:

public abstract class SortedMap<K extends Comparable<K>, V> implements Iterable<Pair<K, V>>
{
    /**
     * Returns a map where all values have been translated using the function
     * <code>f</code>.
     */
     public abstract <C> SortedMap<K, C> map(Function<? super V, ? extends C> f);

    /**
     * Returns a map containing only the keys that satisfies
     * the predicate <code>p</code>.
     */
    public abstract SortedMap<K, V> filter(Predicate<? super K> p);

    // ...
}

到目前为止(使用Java 8)我得到的是:

public final class SortedMapImpl<K extends Comparable<K>, V> extends SortedMap<K,V>
{
    private final Map<K, V> map;

    private SortedMapImpl(Map<K, V> map)
    {
        this.map = new HashMap<K, V>(map);
    }

    @Override
    public <C> SortedMap<K, C> map(Function<? super V, ? extends C> f)
    {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public SortedMap<K, V> filter(Predicate<? super K> p)
    {
        final Map<K, V> filteredMap = map.entrySet()
                                         .stream()
                                         .filter(Predicate<? super Entry<K, V>> p)
                                         .collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue()));

        return new SortedMapImpl<K, V>(filteredMap);
    }

    // ...

}

正如您所看到的,我目前还不知道如何实现map()方法,并且过滤方法至少部分是错误的。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

我会帮助您实施过滤器,希望您能够自己明白并实施地图。

您需要过滤原始地图的条目,并且只保留密钥对密钥谓词满意的条目:

export default class TextWithPrompt extends React.Component {
    render() {
        return (<div>This is text</div>);
    }
}

我不会使用名称public SortedMap<K, V> filter(Predicate<? super K> predicate) { Map<K, V> filteredMap = map.entrySet() .stream() .filter(entry -> predicate.test(entry.getKey())) .collect(Collectors.toMap(entry -> entry.getKey(), entry -> entry.getValue())); return new SortedMapImpl<K, V>(filteredMap); } :您的地图不是地图,也没有排序,SortedMap已经是标准的收藏品名称,这将使您的课堂令人困惑,使用起来很麻烦。