标签: java-stream

将单个对象和对象列表合并到Java中的单个对象列表中

给出一个对象列表

// ["A", ["B", null, "C"], "D", ["E"], [], null, "F"];
List<Object> objects = Arrays.asList("A", Arrays.asList("B", null, "C"), "D", Arrays.asList("E"), Arrays.asList(), null, "F");
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以将非空值组合到一个列表中["A", "B", "C", "D", "E", "F"]

有些人坚持认为帖子必须显示尝试的内容

objects.stream().map(o -> {
        if (o instanceof List) {
            return ((List) o).stream();
        } else return objects.stream();
    }).filter(Objects::nonNull).collect(Collectors.toList()));
Run Code Online (Sandbox Code Playgroud)

显然上面没有用.

java list arraylist java-8 java-stream

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

拆分列表然后排序

我希望与之相反flatMap.我有以下代码:

List<String> list = Arrays.asList("A", "C", "B", "AA", "BB", "CC");
Stream<String> stream = list.stream();
Collection<List<String>> val = stream.sorted().collect(groupingBy(String::length)).values();
System.out.println("Values " + val);
Run Code Online (Sandbox Code Playgroud)

这确实有效,但类型是Collection<List<String>>.我怎么做到的List<List<String>>

我可以迭代Collection或使用new Arraylist().我正在寻找Arrays.asList更简洁和不可变的东西.

如果我演员,我得到java.lang.ClassCastException.

此外,这将对整个列表进行排序,然后进行分组.有没有办法先分组,然后对较小的列表进行排序,这样会更有效率.

java grouping java-stream

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

Java 8流修复中间流方法不应该留下未使用的声纳问题

 group.getTeamMemberIds().stream().filter(id -> userMap.containsKey(id)).
            map(id -> groupDTO.getTeamMembers().add(userMap.get(id)));
Run Code Online (Sandbox Code Playgroud)

Sonar检测到这一点,因为中间流方法不应该被闲置主要bug

java java-8 java-stream sonarqube

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

如何用流替换两个嵌套的for循环和if语句

我有一个if语句嵌套在for循环内,而这两个都嵌套在另一个for循环内。我想提出一些建议,如果可以使用流API对其进行替换,以及是否应该对其进行替换或保留原样。

我一直在寻找解决方案,但是我想要的事情似乎更加复杂,因为我需要基于与另一个列表匹配的ID来修改一个列表。

for (User user : userList) {
    for (Vehicle vehicle : vehicleList) {
        if (user.getId().equals(vehicle.getUserID())) {
            user.addVehicleToList(vehicle);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用流产生相同的结果。

java java-stream

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

Java 8中的legacy for循环,流和parallelStream之间的比较

import java.util.ArrayList;
import java.util.List;

public class IterationBenchmark {

    public static void main(String args[]){
        List<String> persons = new ArrayList<String>();
        persons.add("AAA");
        persons.add("BBB");
        persons.add("CCC");
        persons.add("DDD");
        long timeMillis = System.currentTimeMillis();
        for(String person : persons)
            System.out.println(person);
        System.out.println("Time taken for legacy for loop : "+
                  (System.currentTimeMillis() - timeMillis));
        timeMillis = System.currentTimeMillis();
        persons.stream().forEach(System.out::println);
        System.out.println("Time taken for sequence stream : "+
                  (System.currentTimeMillis() - timeMillis));
        timeMillis = System.currentTimeMillis();
        persons.parallelStream().forEach(System.out::println);
        System.out.println("Time taken for parallel stream : "+
                  (System.currentTimeMillis() - timeMillis));

    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

AAA
BBB
CCC
DDD
Time taken for …
Run Code Online (Sandbox Code Playgroud)

java performance for-loop java-8 java-stream

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

使用java.util.stream api + JAVA8解析字符串列表

我想使用新的java8 API(如stream,lambda,谓词)来使用下面的代码,并将其减少到最小行数

public static List<Long> validateChannelList(String channelList) {
    List<Long> channelListNumber = new ArrayList<Long>();
            String[] channels = channelList.split(",");
    for (String channel : channels) {
                    channelListNumber.add(Long.parseLong(channel));
                }
    }
Run Code Online (Sandbox Code Playgroud)

请使用JAVA8帮助将foreach循环或整个方法减少到最小行数

java collections lambda java-8 java-stream

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

如何用java lambda替换

是否可以用lambda替换构造:

DMXFrame[] frames = new DMXFrame[universes.size()];

for (int i = 0; i < frames.length; i++) {
   frames[i] = universes.get(i).getDMXFrame();
}

return frames;
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream

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

Java流:流的第一个元素减去流的其余部分的总和

我有一个整数数组,例如:

{ 30 , 2, 3, 4, 5}
Run Code Online (Sandbox Code Playgroud)

是否有可能创建一个lambda表达式(使用流)来区分数组的第一个元素(在我们的例子30中)和数组其余部分的总和,(2+3+4+5 = 13)结果是17?

java lambda java-8 java-stream

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

使用流从列表中获取前3个计数

我正在尝试将java7程序转换为java8。我想在下面使用流API进行输出。

public List<String> getTopThreeWeatherCondition7() {
    List<String> _Top3WeatherList = new ArrayList<String>();
    Map<String, Integer> _WeatherCondMap = getWeatherCondition7();
    List<Integer> _WeatherCondList = new ArrayList<Integer>(_WeatherCondMap.values());
    Collections.sort(_WeatherCondList, Collections.reverseOrder());
    List<Integer> _TopThreeWeathersList = _WeatherCondList.subList(0, 3);
    Set<String> _WeatherCondSet = _WeatherCondMap.keySet();
    Integer count = 0;
    for (String _WeatherCond : _WeatherCondSet) {
        count = _WeatherCondMap.get(_WeatherCond);
        for (Integer _TopThreeWeather : _TopThreeWeathersList) {
            if (_TopThreeWeather == count) {
                _Top3WeatherList.add(_WeatherCond);
            }
        }
    }
    _WeatherCondList = null;
    _WeatherCondMap = null;
    _TopThreeWeathersList = null;
    _WeatherCondSet = null;
    return _Top3WeatherList;

}
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

如何使用streams/lambdas重构此方法?

我想使用Streams和Lambdas.但是如何用它重写我当前的方法呢?

 public double calculate() {
            double result = 0.0;

            if (!mediumList.isEmpty()) {
                Iterator<Medium> it = mediumList.iterator();                          
                while (it.hasNext()) {
                    result= result+ it.next().getAge();
                }
                result = result / mediumList.size();
            }
       return result;
}
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream

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