标签: java-stream

如何转换循环迭代n次以使用java Streams API实现列表,其中多个计数动态更改

想要在下面的代码段中使用Streams API并删除当前for循环:

public List<MyObject> performSomeAction(){
    List<String> myList= Arrays.asList("abc","xyz","def");
    List<MyObject> resultList=new ArrayList<MyObject>();
    int startIndex=0;
    int totalNumOfRecords=1000; 
    for(int i=0;i<totalNumOfRecords;i++){
        SomeObject o= xService.doSomething();
        String type = o.getType();
        int length = o.getLength();
        if(myList.contains(type)){
            int[] myarray=getMyArray(startIndex+20, startIndex+length);
            String id=o.getSomeId();
            OtherObject obj= xService.performOperation(myarray,"abcd");
            resultList.add(new MyObject(obj,id));
        }
        startIndex+=length;
    }
    return resultList;
}
Run Code Online (Sandbox Code Playgroud)

我试过这样的事情:

IntStream.range(0,totalNumOfRecords).forEach(i -> xService.doSomething());
Run Code Online (Sandbox Code Playgroud)

但我陷入困境,没有得到进一步的进展,需要从派生对象'o'中取出多个值,并使用它在它上面执行过滤器再次使另一个方法调用得到一些数组,将其传递给其他方法返回我需要创建resultList的其他对象

java java-8 java-stream

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

计算流中的元素并返回Integer insted long

我需要计算Stream中的Elements并将其分配给Integer而不进行强制转换.

.count() 回来很久

想到了.collect(Collectors.reducing(..))但不能弄明白.我觉得有一些简单的事我没有得到.

我的尝试:

Stream<String> s = Stream.of("Hallo ", "Test", "String");
Integer count = s.filter(e -> (e.length() >= lb && e.length() <= ub && !e.contains(" ")))
                 .map(e -> e.toUpperCase())
                 .distinct()
                 .collect(Collectors.reducing(0, e -> 1, Integer::sum)));

System.out.println(count);
Run Code Online (Sandbox Code Playgroud)

java java-stream

0
推荐指数
2
解决办法
875
查看次数

Java 8-Lambda表达式和流迭代HashMap的HashMap

我需要使用lambda表达式迭代HashMap的HashMap并过滤掉一些不需要的条目.我尝试了一些方法,但似乎没有用.以下是地图的结构.

Map<String, Map<Date, String>> sensor_tags = new HashMap<String, Map<Date,String>>();
Run Code Online (Sandbox Code Playgroud)

从这张地图中,我需要删除传感器数据早于特定日期的条目(日期是内部地图的关键).以下是地图sensor_tags-的示例数据

String tagName = "zoneSensor";
Map<Date, String> values= new HashMap<Date, String>();

// (1st entry for tag 1) --> date is day before yesterday
Calendar datekey1 = Calendar.getInstance();
datekey1.set(2018, 12, 01, 12, 30, 45);
values.put(datekey1.getTime(), "ON");

// (2nd entry for tag 1) --> date is yesterdys date
Calendar datekey = Calendar.getInstance();
datekey.set(2018, 12, 02, 12, 30, 45);
values.put(datekey.getTime(), "OFF");

// (3rd entry for tag 1) --> date is today
Calendar instance = …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream

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

将java 1.8转换为1.6

我怎样才能将它转换为java 1.6?方法.stream()在java 1.6中无法使用.

final Optional<Entry<String, String>> mapping = cfg.getTypeMapping()
                .entrySet()
                .stream()
                .filter(e -> e.getKey().startsWith(jsonType + "|"))
                .findFirst();
Run Code Online (Sandbox Code Playgroud)

java json java-6 java-stream

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

如何在Java 8中将字符流转换为字符串

如何在Java 8中转换Stream<Character>成A String?Collectors.joining()期望CharSequence因此它给编译错误。

java java-8 java-stream

0
推荐指数
2
解决办法
1801
查看次数

在Java中深度复制NavigableMap

我有NavigableMap以下格式:

NavigableMap <Long, String> mymap = new ConcurrentSkipListMap <Long, String> ();
//.......some operations

NavigableMap <Long, String> newmap;
//clone mymap into newmap;
Run Code Online (Sandbox Code Playgroud)

如何将内容深层复制/克隆mymap到newmap?Java 8应该可以正常使用.

java hashmap deep-copy concurrenthashmap java-stream

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

将Stream &lt;IntStream&gt;转换为单个IntStream

我想将转换List<String>为IntStream。假设我的清单是["abc", "de", "fghi"]。然后IntStream,我要像1,1,1,2,2,3,3,3,3。(一些出现的次数i在IntStream取决于长度i个串中的给定的列表)

为此,我编写了以下方法(它将不会编译):

private static IntStream getSingleIntStream(List<String> list) {
    final AtomicInteger atomicInteger = new AtomicInteger();
    return list.stream()
            .map(str -> {
                        atomicInteger.incrementAndGet();
                        return IntStream.range(0, str.length())
                                .map(i -> atomicInteger.get());
                    }); // Now I don't understand how can I convert this Stream<IntStream> to a single IntStream 

}
Run Code Online (Sandbox Code Playgroud)

但是我不明白如何将a转换Stream<IntStream>为单个IntStream。(我的猜测是我们可以flatMap以某种方式使用,但我不完全了解如何使用它。)

我使用IntStream而不是Stream<Integer>避免自动装箱,并使我的整个系统更高效。

java java-8 java-stream

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

将List &lt;Map &lt;Long,String &gt;&gt;转换为List &lt;Long&gt; Java 8

我有一个地图列表,其中每个地图只有one key-value pair一个。我需要将其转换为仅键列表。我正在尝试使用流,如下所示:

List<Map<Long, String>> lst = // some data
List<Long> successList = lst.stream().map(ele -> ele.keySet().toArray()[0]).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但是我最终收到以下错误:

java: incompatible types: inference variable T has incompatible bounds
  equality constraints: java.lang.Long
  lower bounds: java.lang.Object
Run Code Online (Sandbox Code Playgroud)

如何解决此问题,或者有什么更好的方法?

java collect java-8 java-stream

0
推荐指数
2
解决办法
169
查看次数

如何在EL Stream API中使用Collectors#joining?

我正在尝试在JSP中将列表的内容打印为单个字符串,并用逗号分隔。

<div>${myList.stream().map(e->e.getStringValue()).collect(Collectors.joining(", "))}</div>
Run Code Online (Sandbox Code Playgroud)

我收到错误:

javax.el.MethodNotFoundException: Method not found: class org.apache.el.stream.Stream.collect(null)
Run Code Online (Sandbox Code Playgroud)

为什么Tomcat使用它自己的版本Stream?有没有一种方法可以避免这种情况,并确保当我将它们放在JSP的EL中时,我在java类中编写的内容具有相同的行为?

我找到了这个答案/sf/answers/3005143991/ 但这不能解决我的问题。它使用Tomcat Streams的自定义方法。

tomcat el java-stream

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

通过首先过滤同一对象的其他唯一值来求和对象的值

假设我有一个对象列表,可称其为具有数量和价格作为字段的对象Order。

例如如下:

对象Order(字段quantity和price)列表包含以下值:

Quantity  Price

5         200
6         100
3         200
1         300
Run Code Online (Sandbox Code Playgroud)

现在,我想使用Java-8来获取以以下方式过滤的列表:

Quantity  Price

8         200
6         100
1         300
Run Code Online (Sandbox Code Playgroud)

价格是要过滤的唯一值,并对价格具有的任何数量进行求和,我想以此为基础形成一个新列表。

请建议我如何使用Java 8 Lambda表达式来完成此操作,谢谢。

java list arraylist java-8 java-stream

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