我有一个任务,我需要在抽象方法中实现一些功能。我的想法是使用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()方法,并且过滤方法至少部分是错误的。非常感谢任何帮助!
答案 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
已经是标准的收藏品名称,这将使您的课堂令人困惑,使用起来很麻烦。