从现有列表中提取结果集的公共代码可以如下:
List<Node> results;
for (Node node : rsp.getNodes()) {
if (node.isValid() && node.getType == NodeType.TEST &&...) {
if (results == null) {
results = new ArrayList<>();
}
results.add(node);
}
}
Run Code Online (Sandbox Code Playgroud)
现在使用java 8和lambdas,因为建议总是使用流来支持?
rsp.getNodes().stream.filter(node -> {
return node.isValid() && node.getType == NodeType.TEST &&...;
}).forEach(node -> results.add(node));
Run Code Online (Sandbox Code Playgroud)
对我来说,最近从java8开始,这看起来并不比现在的java7代码更清晰.无论如何你有更多的经验,并且可以肯定地推荐我使用这些类型的"快捷方式"与lambdas,而不是旧的foreach风格?
我知道最后它可能是一个品味问题.如果是的话,你会觉得我的例子是一个完全可行的情况下,可以始终与流和lambda表达式作为一个很好的做法(我有意识地不使用术语"最佳实践")所取代?
有Collections.unmodifiableCollection(),Collections.unmodifiableSet()但没有Collections.unmodifiableLinkedHashSet()
保留订单的正确选择是什么?
我正在观看来自新波士顿的关于JavaFX的Bucky Roberts的教程,突然他输入了这行代码button.addActionListener(e->{System.out.print("Button Clicked");});.我想知道这个e->被称为什么.我已经在我简单的GUI程序上尝试了它并且它有效.
它比使用actionPerformed()方法更好吗?其他听众也有这样的陈述吗?
使用Java 8中的流API,createObjects()下面将返回X单行中的对象列表.
public class StreamObjectCreator {
public List<X> createObjects(Integer... s) {
return Arrays.stream(s).map(X::new).collect(Collectors.toList());
}
private static class X {
int s;
public X(int s) {
this.s = s;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,考虑以下枚举Y:
private static enum Y {
VALUE_1(2), VALUE_2(1);
private int i;
private Y(int i) {
this.i = i;
}
public int getI() {
return i;
}
}
Run Code Online (Sandbox Code Playgroud)
我想做类似的事情并返回以下列表:
[VALUE_1,VALUE_1,VALUE_2]
换句话说,i每个枚举值的出现.
使用"旧的"Java方式,它可以像这样实现.
List<Y> createEnumList() {
List<Y> list = new ArrayList<Y>();
for (Y …Run Code Online (Sandbox Code Playgroud) 背景:我正在使用Java 1.8中新增的java.util.Base64类.
在文档中,它指定encodeToString接受一个字节数组(还有一些其他选项,但是byte []是我正在使用的那个).但是,doc没有指定字节数组是如何编码的.这是我的功能代码:
import java.util.Base64;
import java.util.Base64.Encoder;
public class Test64 {
public static void main(String[] args){
try{
System.out.println(print64("This should be base64"));
} catch(Exception e) {
e.printStackTrace();
}
}
public static String print64(String test) throws Exception {
String test64 = "";
byte[] testBytes = test.getBytes("US-ASCII");
Base64.Encoder encoder64 = Base64.getUrlEncoder();
test64 = encoder64.encodeToString(testBytes);
return test64;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是Base64 encodeToString是否接受带有ANY编码的byte [].我已经尝试过US-ASCII和UTF-8,但这些都有效,但我希望得出一个总体结论.
final List<String> userIds = request.getUserIds();
final List<String> keys = userIds.stream().map(p -> {
return removePrefix(p);
}).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
基本上,列表中的每个键都userIds包含一个前缀"_user",我想为每个键删除它.所以,我removePrefix在列表的每个项目上调用该函数,并将该结果存储在另一个名为"keys"的列表中
有一些接近Callable<Boolean>,它返回boolean不Boolean,和投掷也不例外?
我想用它 DoIt.until( ()-> someQueryWithBooleanResult() );
是的,我知道,Predicate<Void>有点相似,但我不想使用虚拟参数.
现在我有一个HashMap,我试图减少到总数.这是当前的代码:
HashMap map = new HashMap<String, Long>();
map.put("ex1", 757L);
map.put("ex2", 77L);
map.values()
.stream()
.reduce(0L, (a, b) -> a + b);
Run Code Online (Sandbox Code Playgroud)
有没有更优雅的方式来做到这一点?我想使用sum方法.
此代码首先按名字排序哈希值,然后按姓氏排序.如果2个人具有相同的名字和姓氏,我想按他们的ID值对他们进行排序.请帮助我了解在这种情况下如何与第三个值进行比较.
public static void multiple_sort(HashSet<Person> personSet) {
Comparator<Person> byFirstName = (f1, f2) -> f1.getFirstName().compareTo(f2.getFirstName());
Comparator<Person> byLastName = (f1, f2) -> f1.getLastName().compareTo(f2.getLastName());
personSet.stream().sorted(byLastName.thenComparing(byFirstName)).forEach(e -> System.out.println(e));
}
Run Code Online (Sandbox Code Playgroud) 根据主题:如何在流中获得大于10的第一个数字?
stream()在这种情况下,有什么方法可以帮助吗?
我希望一旦流到达10以上的第一个元素,它将返回它而不循环其余元素.(有点"打破"循环)有可能吗?
java-8 ×10
java ×9
java-stream ×4
base64 ×1
collections ×1
comparator ×1
encoding ×1
enums ×1
events ×1
lambda ×1
reduce ×1
sorting ×1