我正在寻找Java中的KeyValuePair类.
由于java.util大量使用接口,因此没有提供具体实现,只有Map.Entry接口.
我可以导入一些规范的实现吗?这是我讨厌实施100倍的"管道工编程"课程之一.
我有一个我想要转换和过滤的Java Map.作为一个简单的例子,假设我想将所有值转换为整数然后删除奇数条目.
Map<String, String> input = new HashMap<>();
input.put("a", "1234");
input.put("b", "2345");
input.put("c", "3456");
input.put("d", "4567");
Map<String, Integer> output = input.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
e -> Integer.parseInt(e.getValue())
))
.entrySet().stream()
.filter(e -> e.getValue() % 2 == 0)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
System.out.println(output.toString());
Run Code Online (Sandbox Code Playgroud)
这是正确的,并产生: {a=1234, c=3456}
但是,我不禁想知道是否有办法避免.entrySet().stream()两次打电话.
有没有办法可以执行转换和过滤操作,.collect()最后只调用 一次?
有什么办法可以把整个Entry对象放到一个Map像这样的对象:
map.put(entry);
Run Code Online (Sandbox Code Playgroud)
而不是传递键值对,如:
map.put(key,value);
Run Code Online (Sandbox Code Playgroud)
?
我的代码看起来像这样:
for (Map.Entry<Integer, Action> entry : availableActions.entrySet()) {
...
}
Run Code Online (Sandbox Code Playgroud)
我试图像这样嘲笑它:
Map mockAvailableActions = mock(Map.class, Mockito.RETURNS_DEEP_STUBS);
mockAvailableActions.put(new Integer(1), mockAction);
Run Code Online (Sandbox Code Playgroud)
我认为这就足够了.但是entrySet是空的.所以我补充说:
when(mockAvailableActions.entrySet().iterator()).thenReturn(mockIterator);
when(mockIterator.next()).thenReturn(mockAction);
Run Code Online (Sandbox Code Playgroud)
仍然是entrySet为空.我究竟做错了什么?感谢您的任何意见!
在Java中,我正在实现这个:
List<Entry<String, Integer>> listObjects = new ArrayList<Entry<String, Integer>>();
Run Code Online (Sandbox Code Playgroud)
但是如何添加新条目?
因为它不适用于: listObjects.add(new Entry<"abc", 1>());
提前致谢.
我正在创建Map Entry键值对的ArrayList.这样我就可以存储大量单个单词(作为键)并保存它们的总次数(作为值).
我需要能够按值对ArrayList进行排序,以便我可以按其值排序单词.
我有两个问题:
任何帮助非常感谢!
protected void addKeywords(Status status) {
// get tweet
String str = status.getText();
// split into an array remove punctuation and make lower case
String[] splited = str.replaceAll("[^a-zA-Z ]", "").toLowerCase()
.split("\\s+");
// vars used in loop
String thisStr;
int wordTot;
Entry<String, Integer> newEntry = null;
for (int i = 0; i < splited.length; i++) {
// get word from array
thisStr = splited[i].toLowerCase();
thisStr = "hi";
// if this is the first word to …Run Code Online (Sandbox Code Playgroud) 我有这两种方法:
@Override
public void done(E e, Map.Entry<String, T> m) {
}
@Override
public void done(E e, String k, T v) {
this.done(e, null);
}
Run Code Online (Sandbox Code Playgroud)
而不是传递null,我如何创建一个新的Map.Entry?我试过了:
this.done(e, Map.of(k,v));
Run Code Online (Sandbox Code Playgroud)
但是这会创建一个Map而不是Map.Entry.
我在学校的电脑上玩弄 Java 和哈希图。
我能够即时实例化一个Entry类型String, Integer。然后将其添加到ArrayList的Entrie秒。我将此代码通过电子邮件发送给自己以备后用。
但是在我的家用电脑和笔记本电脑上,它不会让我。相同的确切代码说
该方法
entry(string,int)未定义类型Map
代码是:
Map.Entry<String, Integer> entry = Map.entry(largest, maxCount);
Run Code Online (Sandbox Code Playgroud)
我认为这与Map.Entry作为接口的事实有关?
正如谷歌结果似乎说你必须让自己的Entry班级来做到这一点?但是在较新版本的 Java 中,这种情况发生了变化吗?为什么我之前可以很好地执行此代码?
java ×8
dictionary ×3
hashmap ×2
arraylist ×1
collectors ×1
java-11 ×1
java-8 ×1
java-stream ×1
key-value ×1
mockito ×1