标签: java-8

文件名验证

我每分钟在一个线程中验证目录中的许多文件.目前我正在使用下面的功能,工作正常.我的问题是我是否可以重写此方法以更快地运行(java8?),并希望缩短.

public boolean validateFile(String fileName) {
    fileName = fileName.substring(0, fileName.lastIndexOf('.'));
    String[] values = fileName.split("_");
    if (values.length == 4) {
        if(!values[1].matches("0*")) {
            if(!fileName.contains(" ")) {
                if(values[3].equals("PASS") || values[3].equals("FAIL")) {
                    return true;
                }
            }
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

验证规则:

  1. 文件名不能包含任何空格字符.
  2. 文件名拆分器始终为_字符.
  3. 值[1]不能只包含零(0).它必须有12位数字.
  4. 值[3]必须包含"PASS"或"FAIL".
  5. 数组值[]长度必须始终为4.

您可以使用http://ideone.com/dh8j9M上的文件名示例运行和分叉此代码

java string java-8 java-stream

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

将增强的循环转换为Java 8流,过滤器-forEach

我正在尝试学习Java8。是否可以将下面的方法转换为Java 8 Streams filterforEach。如果是这样,怎么办?

protected void isValidId(CarModel model, List<String> errors) throws DataAccessException {

    CarStyle[] styles = model.getStyles();

    for(CarStyle style : styles){
        if(!style.isModels()){
            if(style.getStyleId() > 99){
          errors.add(INVALID_ID + ", Id:" + style.getStyleId());

            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我阅读了一些有关Java 8的教程,但不确定如何实现。谢谢。

编辑:我向该方法添加了一个列表。

java java-8 java-stream

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

在考虑并行化外部流之前,是否会完全并行处理内部并行流?

从这个链接,我只是部分理解,至少在某些时候,java嵌套并行流存在问题.但是,我无法推断出以下问题的答案:

假设我有一个外部srtream和一个内部流,两者都使用并行流.事实证明,根据我的计算,如果内部流首先完全并行完成,那么它将更高效(由于数据位置,即L1/L2/L3 CPU缓存中的缓存)(如果且仅cpu核心可用)做外部流.我认为这对大多数人的情况都是如此.所以我的问题是:

Java会首先并行执行内部流,然后在outerstream上工作吗?如果是这样,它是在编译时还是在运行时做出决定?如果在运行时,JIT甚至足够聪明地意识到如果内部流确实具有比核心数量(32)更多的元素(例如数百个),那么它肯定应该使用所有32个内核来处理在从外部流移动下一个元素之前的内部流; 但是,如果元素的数量很小(例如<32),则可以"并行处理"来自"下一个"外部流的元素的元素.

java concurrency java-8 forkjoinpool java-stream

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

使用Java 8 Optional <T>,Stream循环遍历包含真实布尔字段值的对象列表

我被告知不要.anyMatch(Predicate.isEqual(true))被同事使用.原因是,它不是无效的.他们建议我应该使用Optional<Boolean>.

我有一个帐户列表,我想true只有在帐户有未偿还的活跃贷款时才返回布尔值,否则返回false.

@Data
public class Account {
    private String accountNumber;
    @Getter(AccessLevel.NONE)
    private Boolean activeLoan;
    private String accountReference;
    private Double balance;
    private String status;

    public Boolean hasActiveLoan() {
        return activeLoan;
    }
}
Run Code Online (Sandbox Code Playgroud)

换句话说,只有当hasActiveLoan()等于真时.

以下是我提出的解决方案:

 Boolean checkActiveLoanRule(List<Account> accounts) {

         Optional<Boolean> loanAccountExists = Optional.of(accounts.stream()
                .map(Account::hasActiveLoanAccount)
                .anyMatch(Predicate.isEqual(true)));

         return loanAccountExists.equals(Optional.of(true));
     }
Run Code Online (Sandbox Code Playgroud)

这可以重构以某种方式改进吗?还有其他想法吗?

最重要的是,这样的解决方案是线程安全的吗?

java lambda optional java-8 java-stream

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

如何将Java lambda表达式用于正则表达式

在下面的代码中,我从列表中获取所有元素并在之后拆分文本"(".

for (WebElement element : measureKeys) {
    String[] measure = element.getText().split("\\(");
    testing.add(measure[0])
}
Run Code Online (Sandbox Code Playgroud)

如何在上面的代码中使用lambdas

java lambda selenium java-8

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

在一个java流lambda函数中求和不同的值

我有一个用例需要在这个对象中总结不同的字段,所以我这样编码,我可以把它放在一个流中吗?

int totalUnits = records.stream()
        .mapToInt(DynamoSalesAggregateSummaryRecord::getUnits).sum();
int totalReturns = records.stream()
        .mapToInt(DynamoSalesAggregateSummaryRecord::getReturns).sum();
int totalCancellations = records.stream()
        .mapToInt(DynamoSalesAggregateSummaryRecord::getCancellations).sum();
BigDecimal totalRevenue = records.stream()
        .map(DynamoSalesAggregateSummaryRecord::getRevenue)
        .reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal totalRoyalties = records.stream()
        .map(DynamoSalesAggregateSummaryRecord::getRoyalties)
        .reduce(BigDecimal.ZERO, BigDecimal::add);
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream

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

使用Java 8流的大小为n到数组nx 2的数组

我试图找出一个简单的转换的最优雅的方式int排列(例如{1, 2, 3}),以一个简单的String阵列(例如,{"id", "1", "id", "2", "id", "3"}使用Java 8流串对).

传统上代码如下: -

int[] input = {1, 2, 3};

String[] output = new String[input.length * 2];

int i = 0;
for (int val : input) {
    output[i++] = "id";
    output[i++] = String.valueOf(val);
}
Run Code Online (Sandbox Code Playgroud)

但假设这可以在Java 8中用1-liner完成.

arrays java-8 java-stream

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

Java函数链

我试图找出以下代码无法编译的原因:

Function<Employee, String> getLastName = (Employee employee) -> {
    return employee.getName().substring(employee.getName().indexOf(" ") + 1);
};

Function<Employee, String> getFirstName = (Employee employee) -> {
    return employee.getName().substring(0, employee.getName().indexOf(" "));
};

Function chained = getFirstName.apply(employees.get(2).andThen(getFirstName.apply(employees.get(2)))); 
Run Code Online (Sandbox Code Playgroud)

不能在java 8中包含所有函数吗?

function java-8

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

计算Java 8流中可能包含无效数字的映射值的总和

我有一张地图: Map<String, Map<String, String>> x

我想计算第二张地图中的值总和:

x.values().stream().mapToDouble(y -> Double.parse(y.get("myKey"))).sum();
Run Code Online (Sandbox Code Playgroud)

但是,如果y.get("myKey")不是有效数字,它将按预期抛出错误...有没有办法可以避免它并只传递有效数字

我看到来自guava库的Doubles.tryParse会返回null,因为它不可解析.但我无法弄清楚如何使用它来只加总有效数字.

java java-8

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

RxJava:合并BehaviorSubjects

如何合并两个BehaviorSubjects,使它们表现得像一个BehaviorSubject

我有这样的事情:

class Solution {
    public static void main(String[] args) {
        Subject<List<Integer>> left = BehaviorSubject.createDefault(Arrays.asList(1, 2, 3));
        Subject<List<Integer>> right = BehaviorSubject.createDefault(Arrays.asList(4, 5, 6));
        Single<List<Integer>> merged = left.mergeWith(right).reduce(new ArrayList<Integer>(), (l, r) -> {
            List<Integer> merged1 = new ArrayList<>(l.size() + r.size());
            merged1.addAll(l);
            merged1.addAll(r);
            return merged1;
        });
        merged.subscribe(System.out::println);
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望得到一些东西[1, 2, 3, 4, 5, 6],但subscribe什么都不打印.

android java-8 rx-java rx-java2

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