标签: java-8

在提取结果集时是否应该使用新的流lambdas?

从现有列表中提取结果集的公共代码可以如下:

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表达式作为一个很好的做法(我有意识地不使用术语"最佳实践")所取代?

java lambda java-8 java-stream

1
推荐指数
1
解决办法
58
查看次数

如何获得unmodifiableLinkedHashSet

Collections.unmodifiableCollection(),Collections.unmodifiableSet()但没有Collections.unmodifiableLinkedHashSet()

保留订单的正确选择是什么?

java collections java-8

1
推荐指数
1
解决办法
75
查看次数

"addActionListener(e - > {..})"如何工作?它比ActionListener更好吗?

我正在观看来自新波士顿的关于JavaFX的Bucky Roberts的教程,突然他输入了这行代码button.addActionListener(e->{System.out.print("Button Clicked");});.我想知道这个e->称为什么.我已经在我简单的GUI程序上尝试了它并且它有效.

它比使用actionPerformed()方法更好吗?其他听众也有这样的陈述吗?

java events actionlistener java-8

1
推荐指数
1
解决办法
977
查看次数

使用流API返回一定数量的枚举值

使用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 enums java-8 java-stream

1
推荐指数
1
解决办法
1207
查看次数

Java SE 8 Base64类:byte []参数的编码

背景:我正在使用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,但这些都有效,但我希望得出一个总体结论.

链接到Javadoc for Base64.Encoder

java base64 encoding java-8

1
推荐指数
1
解决办法
811
查看次数

这是Java 8中lambdas的正确用法吗?

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"的列表中

java java-8

1
推荐指数
1
解决办法
133
查看次数

搜索功能接口,不带参数,返回布尔值

有一些接近Callable<Boolean>,它返回booleanBoolean,和投掷也不例外?

我想用它 DoIt.until( ()-> someQueryWithBooleanResult() );

是的,我知道,Predicate<Void>有点相似,但我不想使用虚拟参数.

java java-8 functional-interface

1
推荐指数
1
解决办法
79
查看次数

使用Java 8和HashMap减少清洁地图

现在我有一个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方法.

java reduce java-8 java-stream

1
推荐指数
1
解决办法
1139
查看次数

Java 8基于第3个值排序

此代码首先按名字排序哈希值,然后按姓氏排序.如果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)

sorting comparator java-8

1
推荐指数
1
解决办法
51
查看次数

Java 8:如何在流中获得大于10的第一个数字?

根据主题:如何在流中获得大于10的第一个数字?

stream()在这种情况下,有什么方法可以帮助吗?

我希望一旦流到达10以上的第一个元素,它将返回它而不循环其余元素.(有点"打破"循环)有可能吗?

java java-8 java-stream

1
推荐指数
1
解决办法
1894
查看次数