Source code
The above image gives you abstract idea of following code.

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class ListPropertiesFromBeans {
public static void main(String[] args) {
/* Create an object of `Company` and set values */
Company companyGoogle = new Company();
companyGoogle.setId(1L);
companyGoogle.setCompanyName("Google");
Company companyMicrosoft = new Company();
companyMicrosoft.setId(2L);
companyMicrosoft.setCompanyName("Microsoft");
/**
* - Create `List` of `Company`
* - Add `companyGoogle` and `companyMicrosoft` to List.
*/
List<Company> listCompanies = new ArrayList<>();
listCompanies.add(companyGoogle);
listCompanies.add(companyMicrosoft);
/**
* JavaDoc: `map` method
* Returns a stream consisting of the results of applying the given function to the elements of this stream.
*
* Explanation: `.map(Company::getCompanyName)`
* In this operation we are calling method `getCompanyName()` on each object of `Company` in List.
* That returns the `Stream` of value(CompanyName) of all object in List.
* In last we are collecting that data/values in List<String>
*/
List<String> listCompanyNames = listCompanies.stream()
.map(Company::getCompanyName)
.collect(Collectors.toList());
/* Print the company name collected using `map` method */
listCompanyNames.stream()
.forEach(strCompanyName -> System.out.println(strCompanyName));
}
}

Explanation: .map(Company::getCompanyName)
In this operation we are calling method getCompanyName() on each object of Company in List. That returns the Stream of value(CompanyName[String]) of all object in List and in the last we are collecting that data/values in List<String>