2016-07-06 4 views
2

抽象メソッドにいくつかの機能を実装する必要があるタスクがあります。アイデアは、Java 8を使用することですが、私は、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); 
    } 

    // ... 

} 

あなたは私がマップ()メソッドを実装する方法を、現時点では何の手掛かりを得なかっきた、とフィルター方法は、少なくとも部分的に間違っている見ることができるように。どんな助けでも大歓迎です!

答えて

2

私はフィルタを実装するのを手伝ってくれるでしょう。アイデアを得て、あなた自身でマップを実装してください。

キーsatisifesキー述語いるあなたは、元のマップのエントリをフィルタし、ものだけを維持する必要があります。

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を使用することはありませんが、しかし:あなたのマップではありませんマップはソートされておらず、SortedMapはすでに標準コレクション名であり、クラスを混乱させ、使用するのが面倒です。

+0

ありがとうございました!私はあなたのフィルタの実装を理解しようとしていますし、うまくいけばマップの実装を理解することができます:) – yowazzupjoe

+0

小さな修正、私はそれが '.filter(エントリ - > p.test(entry) getkey())) ' の代わりに ' .filter(entry - > predicate.test(entry.getKey())) ' – yowazzupjoe

関連する問題