例如在.Net中,它提供了具有不同数量和类型的参数的Action委托的几个实现(相当于Java Consumer功能接口),我期望Java 8提供了一些方法来指定Consumer不同类型的多个参数.
我知道在Java中我们不能定义具有相同名称的不同类型,这些类型在泛型类型参数中有所不同,但是提供多参数会有很好的流畅替代方案Consumer.
有没有简单的方法可以做到这一点,这不需要定义新的功能界面?
我是Java 8的新手,不知道如何使用流和它的排序方法.如果我有如下地图,如何按值对此地图进行排序,以便只使用Java 8获取前10个条目.
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("a", 10);
map.put("b", 30);
map.put("c", 50);
map.put("d", 40);
map.put("e", 100);
map.put("f", 60);
map.put("g", 110);
map.put("h", 50);
map.put("i", 90);
map.put("k", 70);
map.put("L", 80);
Run Code Online (Sandbox Code Playgroud)
我知道在Java 8之前,我们可以将这个链接排序:https://stackoverflow.com/a/109389/4315608
我有一组数字:
Set<Integer> mySet = [ 1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)
我想把它分成两组赔率和赔率.
我的方法是使用过滤器两次:
Set<Integer> set1 = mySet.stream().filter(y -> y % 2 == 0).collect(Collectors.toSet())
Set<Integer> set2 =mySet.stream().filter(y -> y % 2 != 0).collect(Collectors.toSet())
Run Code Online (Sandbox Code Playgroud)
我不喜欢这个解决方案,因为我经历了整套两次.
有没有更聪明的方法呢?
我似乎无法理解 Java 如何将流操作组合到流管道中。
执行以下代码时
public
static void main(String[] args) {
StringBuilder sb = new StringBuilder();
var count = Stream.of(new String[]{"1", "2", "3", "4"})
.map(sb::append)
.count();
System.out.println(count);
System.out.println(sb.toString());
}
Run Code Online (Sandbox Code Playgroud)
控制台只打印4. 该StringBuilder对象仍然具有值""。
当我添加过滤操作时: filter(s -> true)
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
var count = Stream.of(new String[]{"1", "2", "3", "4"})
.filter(s -> true)
.map(sb::append)
.count();
System.out.println(count);
System.out.println(sb.toString());
}
Run Code Online (Sandbox Code Playgroud)
输出更改为:
4
1234
Run Code Online (Sandbox Code Playgroud)
这个看似多余的过滤操作如何改变组合流管道的行为?
假设我有一Dog堂课.
在里面我有一个Map<String,String>和一个值是Breed.
public class Dog {
String id;
...
public Map<String,String>
}
Run Code Online (Sandbox Code Playgroud)
我想获得Map的ListS:
HashMap<String, List<Dog>> // breed to a List<Dog>
Run Code Online (Sandbox Code Playgroud)
我宁愿使用Stream而不是迭代它.
我该怎么做?
我刚开始学习Java流并遇到了问题.请看下面的例子.这是Node类的一部分:
private Map<String, Node> nodes;
public Optional<Node> child(String name) {
return Optional.<Node>ofNullable(nodes.get(name));
}
private void findChildren(String name, List<Node> result) {
child(name).ifPresent(result::add);
nodes.values().stream()
// .map(Node::findChildren(name, result))
// .forEach(Node::findChildren(name, result))
.forEach(node -> node.findChildren(name, result));
}
Run Code Online (Sandbox Code Playgroud)
我的目的是使用流中每个节点上的名称和结果参数调用#findChildren.我试图使用方法引用Node :: findChildren没有运气.我很欣赏其他与->运营商合作的解决方案.
是否有可能将方法引用与参数一起使用?我喜欢流的想法,我只想让代码更具可读性.
实际上,我认为有一个类似的问题方法引用与我读过的参数,但无法弄清楚如何在我的代码中使用bind2方法.这是唯一的解决方案吗?
java lambda java-stream functional-interface method-reference
我有一个我想要转换和过滤的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()最后只调用 一次?
假设我们有一个简单的方法,它应该连接Person集合的所有名称并返回结果字符串.
public String concantAndReturnNames(final Collection<Person> persons) {
String result = "";
for (Person person : persons) {
result += person.getName();
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法用1行的新流API forEach函数编写这段代码?
当我注意到一些奇怪的东西时,我正在学习如何使用java 8流.
Arrays.stream() 有浮动数组的所有方法:
Arrays.stream(int[]) : IntStreamArrays.stream(long[]) : LongStreamArrays.stream(double[]) : DoubleStream类似地,有int,double等的Stream实现,但不是浮点数:
IntStreamLongStreamDoubleStream这有什么理由吗?
使用浮点流的推荐方法是什么?
假设我有一个java.util.stream.Stream带有一些好toString方法的对象:将这个流写入文件的最短/最优雅的解决方案是什么,每个流元素一行?
对于阅读,有一个很好的Files.lines方法,所以我认为必须有一个对称的方法来写入文件,但找不到.
Files.write只需要一个可迭代的.