Blog

Member Methods for Java Streams in BoxLang

Maria Jose Herrera August 26, 2024

Spread the word

Maria Jose Herrera

August 26, 2024

Spread the word


Share your thoughts

Streamline Your Data Handling with New BoxLang Stream Collectors

BoxLang's all about enhancing your coding experience by making data manipulation smooth and intuitive. We've recently introduced some powerful new features that extend our support for Java Streams, giving you more flexibility and control over collecting and processing data.

Review Original Post

What’s New?

We’ve added a set of handy stream collectors that bridge the gap between Java Streams and BoxLang's native data types. Here’s a quick rundown of what’s available:

  1. Collect to a BoxLang Array with .toBXArray() . Transform a stream of objects into a native BoxLang array. This method is akin to .toList() in Java, but returns a BoxLang array instead of a Java List.

    import java.util.stream.IntStream;
    
    // Create a stream of integers and convert it to a BoxLang array
    result = IntStream.range(1, 6).toBXArray(); // [1, 2, 3, 4, 5]
    
  2. Convert Map Entries to a BoxLang Struct with .toBXStruct() Use this method to collect a stream of Map entries into a BoxLang struct. It’s perfect for when you want to filter and structure your data efficiently.

    foods = {
      'apples': 'healthy',
      'bananas': 'healthy',
      'pizza': 'junk',
      'tacos': 'junk'
    };
    
    result = foods.entrySet().stream()
      .filter(e -> e.getValue() == 'healthy')
      .toBXStruct();
    
  3. Add Data to an Existing Query with .toBXQuery() This collector allows you to populate an existing query object with data from a stream, making it easy to integrate Java Streams with BoxLang queries.

    // Create an empty query and populate it with data
    qry = queryNew("name,title", "varchar,varchar");
    
    [
      { name: "Brad", title: "Developer" },
      { name: "Luis", title: "CEO" },
      { name: "Jorge", title: "PM" }
    ].stream().toBXQuery(qry);
    
  4. Create a Delimited List with .toBXList() Convert a stream of strings into a delimited list, offering a straightforward way to join data with custom delimiters.

    domain = ["www", "google", "com"].stream().toBXList(".");
    

Why Streams?

Streams offer more than just familiar methods like map()forEach(), and findFirst(). They represent a flexible pipeline for data processing that can handle potentially infinite data sources efficiently. Unlike arrays or structs, streams can handle operations in parallel, providing powerful ways to process large datasets.

Here’s a quick example of using a stream to find the first number in the Fibonacci sequence greater than 1000—all in BoxLang:

import java.util.stream.Stream;

Stream.iterate([0, 1], f -> [f[1], f[0] + f[1]])
  .map(f -> f[1])
  .dropWhile(n -> n < 1000)
  .findFirst()
  .get(); // 1597

Ready to Dive In?

We hope these new stream collectors make your data handling in BoxLang more versatile and powerful. For more details and examples, check out the feature ticket:

Review Original Post

Add Your Comment

Recent Entries

Into the Box 2025 Virtual Tickets Are Now LIVE!

Into the Box 2025 Virtual Tickets Are Now LIVE!

The wait is over! By popular demand, Into the Box 2025 virtual tickets are officially available! Secure your spot today and take advantage of our exclusive early bird pricing before it’s gone!

We’re bringing the community together to push the boundaries of modern development—because change starts with us. We’ve taken the first step, now it’s your turn to evolve and take action!

Maria Jose Herrera
Maria Jose Herrera
April 03, 2025
Security Red Flags in Your ColdFusion App (and how to fix them!)

Security Red Flags in Your ColdFusion App (and how to fix them!)

Security breaches can lead to data leaks, legal issues, and irreversible damage to your company's reputation. Many ColdFusion applications—especially older ones—are vulnerable to cyber threats due to outdated code, weak authentication, and improper security configurations.

When was the last time you audited your ColdFusion application for security risks? If you’re unsure, it’s time for a professional security review.


Top ColdFusion Security Risks – Are You Expose...

Cristobal Escobar
Cristobal Escobar
April 03, 2025
BoxLang 1.0.0 RC3 Has Landed!

BoxLang 1.0.0 RC3 Has Landed!

We are thrilled to announce the release of BoxLang 1.0.0-RC.3, marking a significant milestone in the development of our dynamic JVM language. This release brings a major performance boost and over 100 bug fixes and improvements, making it our most robust release to date. We are now entering the final stretch towards our full release on May 1st, and we need your help to ensure everything is in perfect shape. Please test your applications and report any issues.

Luis Majano
Luis Majano
April 03, 2025